From 47c60c2a3de64a2a25587925d3951c9ca1334e4d Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 15 Jul 2018 11:55:31 +0800 Subject: [PATCH 001/497] Initial commit --- .gitignore | 61 ++++++++++++++++ LICENSE | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 1 + 3 files changed, 263 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ad46b308 --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 00000000..eed6371a --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# casbin.js \ No newline at end of file From 57761ff6a9a439d5ce90beb3e1e30488bf13edb6 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 21 Jul 2018 22:52:09 +0800 Subject: [PATCH 002/497] :tada: Initial Project --- .gitignore | 6 + .prettierrc | 4 + package.json | 43 ++ scripts/build.js | 42 ++ src/casbin.ts | 0 tsconfig.json | 13 + tslint.json | 9 + yarn.lock | 1335 ++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 1452 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 package.json create mode 100644 scripts/build.js create mode 100644 src/casbin.ts create mode 100644 tsconfig.json create mode 100644 tslint.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..fe430a49 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.vscode +.idea +node_modules +lib +dist +yarn-error.log diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..b2095be8 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "semi": false, + "singleQuote": true +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..d8106344 --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "node-casbin", + "version": "1.0.0", + "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", + "main": "lib/casbin.js", + "typings": "lib/casbin.d.ts", + "scripts": { + "precommit": "lint-staged", + "prettier": "prettier --write \"src/**/*.ts\" \"scripts/**/*.js\"", + "build": "node scripts/build.js", + "lint": "tslint \"src/**/*.ts\"", + "fix": "tslint \"src/**/*.ts\" --fix" + }, + "devDependencies": { + "fs-extra": "^7.0.0", + "husky": "^0.14.3", + "lint-staged": "^7.2.0", + "prettier": "^1.13.7", + "rollup": "^0.62.0", + "rollup-plugin-node-resolve": "^3.3.0", + "tslint": "^5.11.0", + "typescript": "^2.9.2" + }, + "dependencies": {}, + "homepage": "http://casbin.org", + "repository": { + "type": "git", + "url": "https://github.com/casbin/node-casbin.git" + }, + "licenses": [ + { + "type": "Apache-2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + } + ], + "lint-staged": { + "*.{ts,js}": [ + "yarn lint", + "prettier --write", + "git add" + ] + } +} \ No newline at end of file diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 00000000..efd2aaf4 --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,42 @@ +const ts = require('typescript') +const fs = require('fs-extra') +const path = require('path') +const rollup = require('rollup') + +function clean() { + fs.removeSync('lib') +} + +function build() { + const tsConfig = path.resolve('tsconfig.json') + const { config: options, error } = ts.parseConfigFileTextToJson( + tsConfig, + ts.sys.readFile(tsConfig) + ) + if (error) throw new Error(error) + options.outDir = path.resolve('lib/es6') + options.declaration = true + options.declarationDir = path.resolve('lib/es6') + + const fileNames = [path.resolve('src/casbin.ts')] + const program = ts.createProgram(fileNames, options) + const emitResult = program.emit() + if (emitResult.emitSkipped) { + throw new Error(`Compile typescript error`) + } + + rollup + .rollup({ + input: path.resolve('lib/es6/casbin.js'), + plugins: [require('rollup-plugin-node-resolve')()] + }) + .then(bundle => + bundle.write({ + file: path.resolve('lib/casbin.js'), + format: 'cjs' + }) + ) +} + +clean() +build() diff --git a/src/casbin.ts b/src/casbin.ts new file mode 100644 index 00000000..e69de29b diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..e3255be0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "esnext", + "moduleResolution": "node", + "declaration": true, + "strict": true, + "outDir": "lib/es6" + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..b08dcee3 --- /dev/null +++ b/tslint.json @@ -0,0 +1,9 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": {}, + "rulesDirectory": [] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..d13a1b17 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1335 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "http://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + dependencies: + any-observable "^0.3.0" + +"@types/estree@0.0.39": + version "0.0.39" + resolved "http://registry.npm.taobao.org/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + +"@types/node@*": + version "10.5.2" + resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707" + +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +any-observable@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + +app-root-path@^2.0.1: + version "2.1.0" + resolved "http://registry.npm.taobao.org/app-root-path/download/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" + +argparse@^1.0.7: + version "1.0.10" + resolved "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-unique@^0.3.2: + version "0.3.2" + resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +atob@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/atob/download/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" + +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base@^0.11.1: + version "0.11.2" + resolved "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-modules@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + +cache-base@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: + version "2.4.1" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +ci-info@^1.0.0: + version "1.1.3" + resolved "http://registry.npm.taobao.org/ci-info/download/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" + +class-utils@^0.3.5: + version "0.3.6" + resolved "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-spinners@^0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/cli-truncate/download/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.2" + resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" + dependencies: + color-name "1.1.1" + +color-name@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + +commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: + version "2.16.0" + resolved "http://registry.npm.taobao.org/commander/download/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +concat-map@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +cosmiconfig@^5.0.2: + version "5.0.5" + resolved "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +date-fns@^1.27.2: + version "1.29.0" + resolved "http://registry.npm.taobao.org/date-fns/download/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +dedent@^0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + +define-property@^0.2.5: + version "0.2.5" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +diff@^3.2.0: + version "3.5.0" + resolved "http://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + +error-ex@^1.3.1: + version "1.3.2" + resolved "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +esprima@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + +esutils@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +execa@^0.9.0: + version "0.9.0" + resolved "http://registry.npm.taobao.org/execa/download/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/exit-hook/download/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +figures@^1.7.0: + version "1.7.0" + resolved "http://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/find-parent-dir/download/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + +for-in@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fs-extra@^7.0.0: + version "7.0.0" + resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +get-own-enumerable-property-symbols@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" + +get-stream@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +glob@^7.1.1: + version "7.1.2" + resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.11" + resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-value@^0.3.1: + version "0.3.1" + resolved "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +husky@^0.14.3: + version "0.14.3" + resolved "http://registry.npm.taobao.org/husky/download/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + +indent-string@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +inflight@^1.0.4: + version "1.0.6" + resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-ci@^1.0.10: + version "1.1.0" + resolved "http://registry.npm.taobao.org/is-ci/download/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + dependencies: + ci-info "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "http://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-module/download/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + +is-number@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-observable@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/is-observable/download/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + dependencies: + symbol-observable "^1.1.0" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + +is-stream@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-windows@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +isarray@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +jest-get-type@^22.1.0: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-get-type/download/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + +jest-validate@^23.0.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/jest-validate/download/jest-validate-23.4.0.tgz#d96eede01ef03ac909c009e9c8e455197d48c201" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.2.0" + +js-tokens@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.7.0, js-yaml@^3.9.0: + version "3.12.0" + resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +leven@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +lint-staged@^7.2.0: + version "7.2.0" + resolved "http://registry.npm.taobao.org/lint-staged/download/lint-staged-7.2.0.tgz#bdf4bb7f2f37fe689acfaec9999db288a5b26888" + dependencies: + app-root-path "^2.0.1" + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.0.2" + debug "^3.1.0" + dedent "^0.7.0" + execa "^0.9.0" + find-parent-dir "^0.3.0" + is-glob "^4.0.0" + is-windows "^1.0.2" + jest-validate "^23.0.0" + listr "^0.14.1" + lodash "^4.17.5" + log-symbols "^2.2.0" + micromatch "^3.1.8" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.1" + string-argv "^0.0.2" + stringify-object "^3.2.2" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/listr-silent-renderer/download/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + +listr-update-renderer@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/listr-update-renderer/download/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "http://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.14.1: + version "0.14.1" + resolved "http://registry.npm.taobao.org/listr/download/listr-0.14.1.tgz#8a7afa4a7135cee4c921d128e0b7dfc6e522d43d" + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.4.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^6.1.0" + strip-ansi "^3.0.1" + +lodash@^4.17.5: + version "4.17.10" + resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + +log-symbols@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log-symbols@^2.2.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/log-update/download/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + +lru-cache@^4.0.1: + version "4.1.3" + resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +map-cache@^0.2.2: + version "0.2.2" + resolved "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-visit@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +micromatch@^3.1.8: + version "3.1.10" + resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +minimatch@^3.0.4: + version "3.0.4" + resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + +npm-path@^2.0.2: + version "2.0.4" + resolved "http://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + dependencies: + which "^1.2.10" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npm-which@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/npm-which/download/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +once@^1.3.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +ora@^0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/ora/download/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + +p-finally@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-map@^1.1.1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +parse-json@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +pify@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +please-upgrade-node@^3.0.2: + version "3.1.1" + resolved "http://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" + dependencies: + semver-compare "^1.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +prettier@^1.13.7: + version "1.13.7" + resolved "http://registry.npm.taobao.org/prettier/download/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" + +pretty-format@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/pretty-format/download/pretty-format-23.2.0.tgz#3b0aaa63c018a53583373c1cb3a5d96cc5e83017" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.6.1: + version "1.6.1" + resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@^1.1.6, resolve@^1.3.2: + version "1.8.1" + resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +ret@~0.1.10: + version "0.1.15" + resolved "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +rollup-plugin-node-resolve@^3.3.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/rollup-plugin-node-resolve/download/rollup-plugin-node-resolve-3.3.0.tgz#c26d110a36812cbefa7ce117cadcd3439aa1c713" + dependencies: + builtin-modules "^2.0.0" + is-module "^1.0.0" + resolve "^1.1.6" + +rollup@^0.62.0: + version "0.62.0" + resolved "http://registry.npm.taobao.org/rollup/download/rollup-0.62.0.tgz#4ca8b3c9582195dc9341ff8a1375f58319b95bfc" + dependencies: + "@types/estree" "0.0.39" + "@types/node" "*" + +rxjs@^6.1.0: + version "6.2.2" + resolved "http://registry.npm.taobao.org/rxjs/download/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" + dependencies: + tslib "^1.9.0" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + +semver@^5.3.0: + version "5.5.0" + resolved "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +set-value@^0.4.3: + version "0.4.3" + resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@^0.5.6: + version "0.5.7" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +staged-git-files@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/staged-git-files/download/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" + +static-extend@^0.1.1: + version "0.1.2" + resolved "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +string-argv@^0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/string-argv/download/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + +string-width@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +stringify-object@^3.2.2: + version "3.2.2" + resolved "http://registry.npm.taobao.org/stringify-object/download/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" + dependencies: + get-own-enumerable-property-symbols "^2.0.1" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + +supports-color@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^5.3.0: + version "5.4.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.9.3" + resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + +tslint@^5.11.0: + version "5.11.0" + resolved "http://registry.npm.taobao.org/tslint/download/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.7.0" + minimatch "^3.0.4" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.27.2" + +tsutils@^2.27.2: + version "2.28.0" + resolved "http://registry.npm.taobao.org/tsutils/download/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" + dependencies: + tslib "^1.8.1" + +typescript@^2.9.2: + version "2.9.2" + resolved "http://registry.npm.taobao.org/typescript/download/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" + +union-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +universalify@^0.1.0: + version "0.1.2" + resolved "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + +unset-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +urix@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +use@^3.1.0: + version "3.1.1" + resolved "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +which@^1.2.10, which@^1.2.9: + version "1.3.1" + resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +yallist@^2.1.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" From 3ad79792e014498edd316181cbaa8628b19ac23d Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 22 Jul 2018 18:15:52 +0800 Subject: [PATCH 003/497] Finish some code of Enforcer. --- src/adapter.ts | 17 +++++++++++++++++ src/casbin.ts | 0 src/effector.ts | 17 +++++++++++++++++ src/enforcer.ts | 34 ++++++++++++++++++++++++++++++++++ src/function_map.ts | 17 +++++++++++++++++ src/model.ts | 17 +++++++++++++++++ src/watcher.ts | 17 +++++++++++++++++ 7 files changed, 119 insertions(+) create mode 100644 src/adapter.ts delete mode 100644 src/casbin.ts create mode 100644 src/effector.ts create mode 100644 src/enforcer.ts create mode 100644 src/function_map.ts create mode 100644 src/model.ts create mode 100644 src/watcher.ts diff --git a/src/adapter.ts b/src/adapter.ts new file mode 100644 index 00000000..02d7d861 --- /dev/null +++ b/src/adapter.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class Adapter { + +} diff --git a/src/casbin.ts b/src/casbin.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/src/effector.ts b/src/effector.ts new file mode 100644 index 00000000..4eddb832 --- /dev/null +++ b/src/effector.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class Effector { + +} diff --git a/src/enforcer.ts b/src/enforcer.ts new file mode 100644 index 00000000..72707064 --- /dev/null +++ b/src/enforcer.ts @@ -0,0 +1,34 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class Enforcer { + protected modelPath: string; + public model: Model; + protected fm: FunctionMap; + private eft: Effector; + + protected adapter: Adapter; + protected watcher: Watcher; + private rm RoleManager; + + private enabled: boolean; + protected autoSave: boolean; + protected autoBuildRoleLinks: boolean; + + public newModel(): Model { + } + + private initialize(): void { + } +} diff --git a/src/function_map.ts b/src/function_map.ts new file mode 100644 index 00000000..d4444c97 --- /dev/null +++ b/src/function_map.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class FunctionMap { + +} diff --git a/src/model.ts b/src/model.ts new file mode 100644 index 00000000..162ce9b1 --- /dev/null +++ b/src/model.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class Model { + +} diff --git a/src/watcher.ts b/src/watcher.ts new file mode 100644 index 00000000..ab629d3f --- /dev/null +++ b/src/watcher.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class Watcher { + +} From bc877a5a6820c6aba15dab9a642fff5a741c11b3 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 22 Jul 2018 19:29:14 +0800 Subject: [PATCH 004/497] Add declarations for classes: Model and Policy. --- src/config.ts | 17 ++++++++++++++ src/model.ts | 27 +++++++++++++++++++++++ src/policy.ts | 54 +++++++++++++++++++++++++++++++++++++++++++++ src/role_manager.ts | 17 ++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 src/config.ts create mode 100644 src/policy.ts create mode 100644 src/role_manager.ts diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 00000000..2cdc4302 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class Config { + +} diff --git a/src/model.ts b/src/model.ts index 162ce9b1..652b877d 100644 --- a/src/model.ts +++ b/src/model.ts @@ -13,5 +13,32 @@ // limitations under the License. class Model { + private sectionNameMap: {[index: string]: string}; + constructor() { + } + + private loadAssertion(model: Model, cfg: Config, sec: string, key: string): boolean { + return true; + } + + public addDef(sec: string, key: string, value: string): boolean { + return true; + } + + private getKeySuffix(i: number): string { + return ""; + } + + private loadSection(model: Model, cfg: Config, sec: string): void { + } + + public loadModel(path: string): void { + } + + public loadModelFromText(text: string): void { + } + + public printModel(): void { + } } diff --git a/src/policy.ts b/src/policy.ts new file mode 100644 index 00000000..165711e8 --- /dev/null +++ b/src/policy.ts @@ -0,0 +1,54 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class Policy { + public model: {[index: string]: string}; + + public buildRoleLinks(rm: RoleManager): void { + } + + public printPolicy(): void { + } + + public clearPolicy(): void { + } + + public getPolicy(sec: string, ptype: string): string[][] { + return []; + } + + public getFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { + return []; + } + + public hasPolicy(sec: string, ptype: string, rule: string[]): boolean { + return true; + } + + public addPolicy(sec: string, ptype: string, rule: string[]): boolean { + return true; + } + + public removePolicy(sec: string, ptype: string, rule: string[]): boolean { + return true; + } + + public removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): boolean { + return true; + } + + public getValuesForFieldInPolicy(sec: string, ptype: string, fieldIndex: number): string[] { + return []; + } +} diff --git a/src/role_manager.ts b/src/role_manager.ts new file mode 100644 index 00000000..03554192 --- /dev/null +++ b/src/role_manager.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +class RoleManager { + +} From 3ee8862c954c3460d789ec56c914a3df3bd42186 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 22 Jul 2018 19:38:13 +0800 Subject: [PATCH 005/497] Add interfaces: IAdapter and IWatcher. --- src/adapter.ts | 10 +++++++++- src/enforcer.ts | 4 ++-- src/watcher.ts | 4 +++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/adapter.ts b/src/adapter.ts index 02d7d861..d73e3cc2 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -12,6 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -class Adapter { +interface IAdapter { + loadPolicy(model: Model): void; + savePolicy(model: Model): void; + + addPolicy(sec: string, ptype: string, rule: string[]): void; + + removePolicy(sec: string, ptype: string, rule: string[]): void; + + removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): void; } diff --git a/src/enforcer.ts b/src/enforcer.ts index 72707064..ebfebd8d 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -18,8 +18,8 @@ class Enforcer { protected fm: FunctionMap; private eft: Effector; - protected adapter: Adapter; - protected watcher: Watcher; + protected adapter: IAdapter; + protected watcher: IWatcher; private rm RoleManager; private enabled: boolean; diff --git a/src/watcher.ts b/src/watcher.ts index ab629d3f..2f22a65d 100644 --- a/src/watcher.ts +++ b/src/watcher.ts @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -class Watcher { +interface IWatcher { + setUpdateCallback(): void; + update(): void; } From 2214cee2110c94a10ec035b7cb48cec693dd93ac Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 22 Jul 2018 19:41:03 +0800 Subject: [PATCH 006/497] Add interface: IEffector. --- src/effector.ts | 8 +++++++- src/enforcer.ts | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/effector.ts b/src/effector.ts index 4eddb832..d1399fdc 100644 --- a/src/effector.ts +++ b/src/effector.ts @@ -12,6 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -class Effector { +enum Effect { + Allow = 1, + Indeterminate, + Deny, +} +interface IEffector { + mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; } diff --git a/src/enforcer.ts b/src/enforcer.ts index ebfebd8d..335b5be9 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -16,7 +16,7 @@ class Enforcer { protected modelPath: string; public model: Model; protected fm: FunctionMap; - private eft: Effector; + private eft: IEffector; protected adapter: IAdapter; protected watcher: IWatcher; From adae5a2ea07864ee27cba0c4124938dd666d5b15 Mon Sep 17 00:00:00 2001 From: nodece Date: Sun, 22 Jul 2018 20:30:43 +0800 Subject: [PATCH 007/497] :wrench: tslint --- tslint.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tslint.json b/tslint.json index b08dcee3..43808498 100644 --- a/tslint.json +++ b/tslint.json @@ -4,6 +4,11 @@ "tslint:recommended" ], "jsRules": {}, - "rules": {}, + "rules": { + "member-ordering": false, + "ordered-imports": false, + "object-literal-sort-keys": false, + "no-empty": false + }, "rulesDirectory": [] } \ No newline at end of file From f853b559a348712694cc3462bddc9fafafbcb993 Mon Sep 17 00:00:00 2001 From: dcos Date: Sun, 22 Jul 2018 21:40:49 +0800 Subject: [PATCH 008/497] :art: add export keyword for every class --- src/adapter.ts | 17 ++++++++++------ src/config.ts | 4 +--- src/effector.ts | 6 +++--- src/enforcer.ts | 28 +++++++++++++-------------- src/function_map.ts | 4 +--- src/model.ts | 32 +++++++++++++++--------------- src/policy.ts | 47 ++++++++++++++++++++++++++++----------------- src/role_manager.ts | 4 +--- src/watcher.ts | 6 +++--- 9 files changed, 78 insertions(+), 70 deletions(-) diff --git a/src/adapter.ts b/src/adapter.ts index d73e3cc2..106eec7e 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -12,14 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -interface IAdapter { - loadPolicy(model: Model): void; +export interface IAdapter { + loadPolicy(model: Model): void - savePolicy(model: Model): void; + savePolicy(model: Model): void - addPolicy(sec: string, ptype: string, rule: string[]): void; + addPolicy(sec: string, ptype: string, rule: string[]): void - removePolicy(sec: string, ptype: string, rule: string[]): void; + removePolicy(sec: string, ptype: string, rule: string[]): void - removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): void; + removeFilteredPolicy( + sec: string, + ptype: string, + fieldIndex: number, + ...fieldValues: string[] + ): void } diff --git a/src/config.ts b/src/config.ts index 2cdc4302..804f8198 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,6 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -class Config { - -} +export class Config {} diff --git a/src/effector.ts b/src/effector.ts index d1399fdc..64f2acf2 100644 --- a/src/effector.ts +++ b/src/effector.ts @@ -15,9 +15,9 @@ enum Effect { Allow = 1, Indeterminate, - Deny, + Deny } -interface IEffector { - mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; +export interface IEffector { + mergeEffects(expr: string, effects: Effect[], results: number[]): boolean } diff --git a/src/enforcer.ts b/src/enforcer.ts index 335b5be9..f303e8c7 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,23 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. -class Enforcer { - protected modelPath: string; - public model: Model; - protected fm: FunctionMap; - private eft: IEffector; +export class Enforcer { + protected modelPath: string + public model: Model + protected fm: FunctionMap + private eft: IEffector - protected adapter: IAdapter; - protected watcher: IWatcher; - private rm RoleManager; + protected adapter: IAdapter + protected watcher: IWatcher + private rm: RoleManager - private enabled: boolean; - protected autoSave: boolean; - protected autoBuildRoleLinks: boolean; + private enabled: boolean + protected autoSave: boolean + protected autoBuildRoleLinks: boolean - public newModel(): Model { - } + public newModel(): Model {} - private initialize(): void { - } + private initialize(): void {} } diff --git a/src/function_map.ts b/src/function_map.ts index d4444c97..ae05645e 100644 --- a/src/function_map.ts +++ b/src/function_map.ts @@ -12,6 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -class FunctionMap { - -} +export class FunctionMap {} diff --git a/src/model.ts b/src/model.ts index 652b877d..c3ab8a3d 100644 --- a/src/model.ts +++ b/src/model.ts @@ -12,33 +12,33 @@ // See the License for the specific language governing permissions and // limitations under the License. -class Model { - private sectionNameMap: {[index: string]: string}; +export class Model { + private sectionNameMap: { [index: string]: string } - constructor() { - } + constructor() {} - private loadAssertion(model: Model, cfg: Config, sec: string, key: string): boolean { - return true; + private loadAssertion( + model: Model, + cfg: Config, + sec: string, + key: string + ): boolean { + return true } public addDef(sec: string, key: string, value: string): boolean { - return true; + return true } private getKeySuffix(i: number): string { - return ""; + return '' } - private loadSection(model: Model, cfg: Config, sec: string): void { - } + private loadSection(model: Model, cfg: Config, sec: string): void {} - public loadModel(path: string): void { - } + public loadModel(path: string): void {} - public loadModelFromText(text: string): void { - } + public loadModelFromText(text: string): void {} - public printModel(): void { - } + public printModel(): void {} } diff --git a/src/policy.ts b/src/policy.ts index 165711e8..cf5ae6a6 100644 --- a/src/policy.ts +++ b/src/policy.ts @@ -12,43 +12,54 @@ // See the License for the specific language governing permissions and // limitations under the License. -class Policy { - public model: {[index: string]: string}; +export class Policy { + public model: { [index: string]: string } - public buildRoleLinks(rm: RoleManager): void { - } + public buildRoleLinks(rm: RoleManager): void {} - public printPolicy(): void { - } + public printPolicy(): void {} - public clearPolicy(): void { - } + public clearPolicy(): void {} public getPolicy(sec: string, ptype: string): string[][] { - return []; + return [] } - public getFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { - return []; + public getFilteredPolicy( + sec: string, + ptype: string, + fieldIndex: number, + ...fieldValues: string[] + ): string[][] { + return [] } public hasPolicy(sec: string, ptype: string, rule: string[]): boolean { - return true; + return true } public addPolicy(sec: string, ptype: string, rule: string[]): boolean { - return true; + return true } public removePolicy(sec: string, ptype: string, rule: string[]): boolean { - return true; + return true } - public removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): boolean { - return true; + public removeFilteredPolicy( + sec: string, + ptype: string, + fieldIndex: number, + ...fieldValues: string[] + ): boolean { + return true } - public getValuesForFieldInPolicy(sec: string, ptype: string, fieldIndex: number): string[] { - return []; + public getValuesForFieldInPolicy( + sec: string, + ptype: string, + fieldIndex: number + ): string[] { + return [] } } diff --git a/src/role_manager.ts b/src/role_manager.ts index 03554192..ec068f16 100644 --- a/src/role_manager.ts +++ b/src/role_manager.ts @@ -12,6 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -class RoleManager { - -} +export class RoleManager {} diff --git a/src/watcher.ts b/src/watcher.ts index 2f22a65d..174cc40b 100644 --- a/src/watcher.ts +++ b/src/watcher.ts @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -interface IWatcher { - setUpdateCallback(): void; +export interface IWatcher { + setUpdateCallback(): void - update(): void; + update(): void } From a5890ce5c644884bad478fbbc54845a8843544c9 Mon Sep 17 00:00:00 2001 From: dcos Date: Sun, 22 Jul 2018 22:47:02 +0800 Subject: [PATCH 009/497] :wrench: add tslint rules --- tslint.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tslint.json b/tslint.json index 43808498..f8bae119 100644 --- a/tslint.json +++ b/tslint.json @@ -8,7 +8,9 @@ "member-ordering": false, "ordered-imports": false, "object-literal-sort-keys": false, - "no-empty": false + "no-empty": false, + "semicolon": false, + "quotemark": [true, "single"] }, "rulesDirectory": [] } \ No newline at end of file From 7aaacaff38749c6320e7f216d0b98bf5f1973fa7 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 22 Jul 2018 23:19:19 +0800 Subject: [PATCH 010/497] :art: add import lib for enforcer --- src/enforcer.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/enforcer.ts b/src/enforcer.ts index f303e8c7..5b4f0faf 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,6 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. +import Model from './model.ts' +import FunctionMap from './function_map.ts' +import IEffector from './effector.ts' +import IAdapter from './adapter.ts' +import IWatcher from './watcher.ts' +import RoleManager from './role_manager.ts' + export class Enforcer { protected modelPath: string public model: Model From 06fc5a0d3d21d8c8c1392361c0eb37210568f545 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 23 Jul 2018 00:00:16 +0800 Subject: [PATCH 011/497] Add code to class: Config. --- src/config.ts | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/config.ts b/src/config.ts index 804f8198..e1d24cb1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,4 +12,54 @@ // See the License for the specific language governing permissions and // limitations under the License. -export class Config {} +export class Config { + private static DEFAULT_SECTION = "default"; + private static DEFAULT_COMMENT = "#"; + private static DEFAULT_COMMENT_SEM = ";"; + + private data: {[index: string]: string}; + + constructor() { + } + + public static newConfig(confName: string): Config { + return new Config(); + } + + public static newConfigFromText(text: string): Config { + return new Config(); + } + + private addConfig(section: string, option: string, value: string): boolean { + return true; + } + + private parse(fname: string): void { + } + + private parseBuffer(buf: string): void { + } + + public getBool(key: string): boolean { + return true; + } + + public getNumber(key: string): number { + return 0; + } + + public getString(key: string): string { + return ""; + } + + public getStrings(key: string): string[] { + return []; + } + + public set(key: string, value: string): void { + } + + public get(key: string): string { + return ""; + } +} From e4fb9c314dc4ca8a6a37e7f0ee70239be10e5179 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 23 Jul 2018 00:04:48 +0800 Subject: [PATCH 012/497] Enable tslint's semicolon rule. --- src/adapter.ts | 12 ++++++------ src/effector.ts | 2 +- src/enforcer.ts | 32 ++++++++++++++++---------------- src/model.ts | 8 ++++---- src/policy.ts | 22 +++++++++++----------- src/watcher.ts | 4 ++-- tslint.json | 1 - 7 files changed, 40 insertions(+), 41 deletions(-) diff --git a/src/adapter.ts b/src/adapter.ts index 106eec7e..0afb9365 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -13,18 +13,18 @@ // limitations under the License. export interface IAdapter { - loadPolicy(model: Model): void + loadPolicy(model: Model): void; - savePolicy(model: Model): void + savePolicy(model: Model): void; - addPolicy(sec: string, ptype: string, rule: string[]): void + addPolicy(sec: string, ptype: string, rule: string[]): void; - removePolicy(sec: string, ptype: string, rule: string[]): void + removePolicy(sec: string, ptype: string, rule: string[]): void; removeFilteredPolicy( sec: string, ptype: string, fieldIndex: number, - ...fieldValues: string[] - ): void + ...fieldValues: string[], + ): void; } diff --git a/src/effector.ts b/src/effector.ts index 64f2acf2..98f73a12 100644 --- a/src/effector.ts +++ b/src/effector.ts @@ -19,5 +19,5 @@ enum Effect { } export interface IEffector { - mergeEffects(expr: string, effects: Effect[], results: number[]): boolean + mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; } diff --git a/src/enforcer.ts b/src/enforcer.ts index 5b4f0faf..825a06a7 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,26 +12,26 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Model from './model.ts' -import FunctionMap from './function_map.ts' -import IEffector from './effector.ts' -import IAdapter from './adapter.ts' -import IWatcher from './watcher.ts' -import RoleManager from './role_manager.ts' +import Model from './model.ts'; +import FunctionMap from './function_map.ts'; +import IEffector from './effector.ts'; +import IAdapter from './adapter.ts'; +import IWatcher from './watcher.ts'; +import RoleManager from './role_manager.ts'; export class Enforcer { - protected modelPath: string - public model: Model - protected fm: FunctionMap - private eft: IEffector + protected modelPath: string; + public model: Model; + protected fm: FunctionMap; + private eft: IEffector; - protected adapter: IAdapter - protected watcher: IWatcher - private rm: RoleManager + protected adapter: IAdapter; + protected watcher: IWatcher; + private rm: RoleManager; - private enabled: boolean - protected autoSave: boolean - protected autoBuildRoleLinks: boolean + private enabled: boolean; + protected autoSave: boolean; + protected autoBuildRoleLinks: boolean; public newModel(): Model {} diff --git a/src/model.ts b/src/model.ts index c3ab8a3d..33b2977f 100644 --- a/src/model.ts +++ b/src/model.ts @@ -21,17 +21,17 @@ export class Model { model: Model, cfg: Config, sec: string, - key: string + key: string, ): boolean { - return true + return true; } public addDef(sec: string, key: string, value: string): boolean { - return true + return true; } private getKeySuffix(i: number): string { - return '' + return ''; } private loadSection(model: Model, cfg: Config, sec: string): void {} diff --git a/src/policy.ts b/src/policy.ts index cf5ae6a6..3a90f33b 100644 --- a/src/policy.ts +++ b/src/policy.ts @@ -13,7 +13,7 @@ // limitations under the License. export class Policy { - public model: { [index: string]: string } + public model: { [index: string]: string }; public buildRoleLinks(rm: RoleManager): void {} @@ -22,44 +22,44 @@ export class Policy { public clearPolicy(): void {} public getPolicy(sec: string, ptype: string): string[][] { - return [] + return []; } public getFilteredPolicy( sec: string, ptype: string, fieldIndex: number, - ...fieldValues: string[] + ...fieldValues: string[], ): string[][] { - return [] + return []; } public hasPolicy(sec: string, ptype: string, rule: string[]): boolean { - return true + return true; } public addPolicy(sec: string, ptype: string, rule: string[]): boolean { - return true + return true; } public removePolicy(sec: string, ptype: string, rule: string[]): boolean { - return true + return true; } public removeFilteredPolicy( sec: string, ptype: string, fieldIndex: number, - ...fieldValues: string[] + ...fieldValues: string[], ): boolean { - return true + return true; } public getValuesForFieldInPolicy( sec: string, ptype: string, - fieldIndex: number + fieldIndex: number, ): string[] { - return [] + return []; } } diff --git a/src/watcher.ts b/src/watcher.ts index 174cc40b..06fb0b8e 100644 --- a/src/watcher.ts +++ b/src/watcher.ts @@ -13,7 +13,7 @@ // limitations under the License. export interface IWatcher { - setUpdateCallback(): void + setUpdateCallback(): void; - update(): void + update(): void; } diff --git a/tslint.json b/tslint.json index f8bae119..87af1451 100644 --- a/tslint.json +++ b/tslint.json @@ -9,7 +9,6 @@ "ordered-imports": false, "object-literal-sort-keys": false, "no-empty": false, - "semicolon": false, "quotemark": [true, "single"] }, "rulesDirectory": [] From 1c520867cdc7a2bed6fd1c2c562d6b18b41b98de Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 23 Jul 2018 00:08:31 +0800 Subject: [PATCH 013/497] Remove trailing ".ts" in imports. --- src/enforcer.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 825a06a7..32e4c75a 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Model from './model.ts'; -import FunctionMap from './function_map.ts'; -import IEffector from './effector.ts'; -import IAdapter from './adapter.ts'; -import IWatcher from './watcher.ts'; -import RoleManager from './role_manager.ts'; +import Model from './model'; +import FunctionMap from './function_map'; +import IEffector from './effector'; +import IAdapter from './adapter'; +import IWatcher from './watcher'; +import RoleManager from './role_manager'; export class Enforcer { protected modelPath: string; From 6962974bca0bcec0ebf742af18472d8cf1e415e3 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 23 Jul 2018 00:10:36 +0800 Subject: [PATCH 014/497] Add missing imports. --- src/adapter.ts | 2 ++ src/model.ts | 2 ++ src/policy.ts | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/adapter.ts b/src/adapter.ts index 0afb9365..26b728b7 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +import Model from './model'; + export interface IAdapter { loadPolicy(model: Model): void; diff --git a/src/model.ts b/src/model.ts index 33b2977f..92bc3529 100644 --- a/src/model.ts +++ b/src/model.ts @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +import Config from './config'; + export class Model { private sectionNameMap: { [index: string]: string } diff --git a/src/policy.ts b/src/policy.ts index 3a90f33b..5c0c14b1 100644 --- a/src/policy.ts +++ b/src/policy.ts @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +import RoleManager from './role_manager'; + export class Policy { public model: { [index: string]: string }; From 39967a31fc067edb3b4a4e52b5946f70c87990bc Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 23 Jul 2018 00:13:19 +0800 Subject: [PATCH 015/497] Use single quotemark in code. --- src/config.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/config.ts b/src/config.ts index e1d24cb1..792864aa 100644 --- a/src/config.ts +++ b/src/config.ts @@ -13,9 +13,9 @@ // limitations under the License. export class Config { - private static DEFAULT_SECTION = "default"; - private static DEFAULT_COMMENT = "#"; - private static DEFAULT_COMMENT_SEM = ";"; + private static DEFAULT_SECTION = 'default'; + private static DEFAULT_COMMENT = '#'; + private static DEFAULT_COMMENT_SEM = ';'; private data: {[index: string]: string}; @@ -49,7 +49,7 @@ export class Config { } public getString(key: string): string { - return ""; + return ''; } public getStrings(key: string): string[] { @@ -60,6 +60,6 @@ export class Config { } public get(key: string): string { - return ""; + return ''; } } From 7a3fe5ffcabc40037d68e0d5fcf6c5906b34b2b2 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 23 Jul 2018 00:15:32 +0800 Subject: [PATCH 016/497] Use camelCase in source file naming. --- src/{function_map.ts => functionMap.ts} | 0 src/{role_manager.ts => roleManager.ts} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{function_map.ts => functionMap.ts} (100%) rename src/{role_manager.ts => roleManager.ts} (100%) diff --git a/src/function_map.ts b/src/functionMap.ts similarity index 100% rename from src/function_map.ts rename to src/functionMap.ts diff --git a/src/role_manager.ts b/src/roleManager.ts similarity index 100% rename from src/role_manager.ts rename to src/roleManager.ts From d940a12f5fdf82a14f0e3587ffa7a0293ee0f868 Mon Sep 17 00:00:00 2001 From: nodece Date: Mon, 23 Jul 2018 23:13:26 +0800 Subject: [PATCH 017/497] :hankey: improve code --- .prettierrc | 2 +- package.json | 2 +- scripts/build.js | 38 ++++++++++++++++++++------------------ src/adapter.ts | 21 +++++++++++++++++++-- src/config.ts | 16 ++++++---------- src/effector.ts | 10 ++++++++++ src/enforcer.ts | 29 ++++++++++++++++++++++------- src/model.ts | 10 ++++++---- src/policy.ts | 10 +++++----- src/watcher.ts | 6 ++++++ tslint.json | 3 ++- 11 files changed, 98 insertions(+), 49 deletions(-) diff --git a/.prettierrc b/.prettierrc index b2095be8..937375d2 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,4 @@ { - "semi": false, + "semi": true, "singleQuote": true } diff --git a/package.json b/package.json index d8106344..af1f109a 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ ], "lint-staged": { "*.{ts,js}": [ - "yarn lint", + "yarn tslint \"src/**/*.ts\"", "prettier --write", "git add" ] diff --git a/scripts/build.js b/scripts/build.js index efd2aaf4..5de90ed7 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,28 +1,30 @@ -const ts = require('typescript') -const fs = require('fs-extra') -const path = require('path') -const rollup = require('rollup') +const ts = require('typescript'); +const fs = require('fs-extra'); +const path = require('path'); +const rollup = require('rollup'); function clean() { - fs.removeSync('lib') + fs.removeSync('lib'); } function build() { - const tsConfig = path.resolve('tsconfig.json') + const tsConfig = path.resolve('tsconfig.json'); const { config: options, error } = ts.parseConfigFileTextToJson( tsConfig, ts.sys.readFile(tsConfig) - ) - if (error) throw new Error(error) - options.outDir = path.resolve('lib/es6') - options.declaration = true - options.declarationDir = path.resolve('lib/es6') + ); + if (error) { + throw new Error(error); + } + options.outDir = path.resolve('lib/es6'); + options.declaration = true; + options.declarationDir = path.resolve('lib/es6'); - const fileNames = [path.resolve('src/casbin.ts')] - const program = ts.createProgram(fileNames, options) - const emitResult = program.emit() + const fileNames = [path.resolve('src/casbin.ts')]; + const program = ts.createProgram(fileNames, options); + const emitResult = program.emit(); if (emitResult.emitSkipped) { - throw new Error(`Compile typescript error`) + throw new Error(`Compile typescript error`); } rollup @@ -35,8 +37,8 @@ function build() { file: path.resolve('lib/casbin.js'), format: 'cjs' }) - ) + ); } -clean() -build() +clean(); +build(); diff --git a/src/adapter.ts b/src/adapter.ts index 26b728b7..0c467f46 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Model from './model'; +import { Model } from './model'; export interface IAdapter { loadPolicy(model: Model): void; @@ -27,6 +27,23 @@ export interface IAdapter { sec: string, ptype: string, fieldIndex: number, - ...fieldValues: string[], + ...fieldValues: string[] ): void; } + +export class Adapter implements IAdapter { + public addPolicy(sec: string, ptype: string, rule: string[]): void {} + + public loadPolicy(model: Model): void {} + + public removeFilteredPolicy( + sec: string, + ptype: string, + fieldIndex: number, + ...fieldValues: string[] + ): void {} + + public removePolicy(sec: string, ptype: string, rule: string[]): void {} + + public savePolicy(model: Model): void {} +} diff --git a/src/config.ts b/src/config.ts index 792864aa..00f53b56 100644 --- a/src/config.ts +++ b/src/config.ts @@ -14,13 +14,12 @@ export class Config { private static DEFAULT_SECTION = 'default'; - private static DEFAULT_COMMENT = '#'; + private static DEFAULT_COMMENT = '#'; private static DEFAULT_COMMENT_SEM = ';'; - private data: {[index: string]: string}; + private data: { [index: string]: string } = {}; - constructor() { - } + constructor() {} public static newConfig(confName: string): Config { return new Config(); @@ -34,11 +33,9 @@ export class Config { return true; } - private parse(fname: string): void { - } + private parse(fname: string): void {} - private parseBuffer(buf: string): void { - } + private parseBuffer(buf: string): void {} public getBool(key: string): boolean { return true; @@ -56,8 +53,7 @@ export class Config { return []; } - public set(key: string, value: string): void { - } + public set(key: string, value: string): void {} public get(key: string): string { return ''; diff --git a/src/effector.ts b/src/effector.ts index 98f73a12..1b5974e8 100644 --- a/src/effector.ts +++ b/src/effector.ts @@ -21,3 +21,13 @@ enum Effect { export interface IEffector { mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; } + +export class Effector implements IEffector { + public mergeEffects( + expr: string, + effects: Effect[], + results: number[] + ): boolean { + return false; + } +} diff --git a/src/enforcer.ts b/src/enforcer.ts index 32e4c75a..a472710a 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Model from './model'; -import FunctionMap from './function_map'; -import IEffector from './effector'; -import IAdapter from './adapter'; -import IWatcher from './watcher'; -import RoleManager from './role_manager'; +import { Model } from './model'; +import { FunctionMap } from './functionMap'; +import { Effector, IEffector } from './effector'; +import { Adapter, IAdapter } from './adapter'; +import { IWatcher, Watcher } from './watcher'; +import { RoleManager } from './roleManager'; export class Enforcer { protected modelPath: string; @@ -33,7 +33,22 @@ export class Enforcer { protected autoSave: boolean; protected autoBuildRoleLinks: boolean; - public newModel(): Model {} + constructor() { + this.modelPath = ''; + this.model = new Model(); + this.fm = new FunctionMap(); + this.eft = new Effector(); + this.adapter = new Adapter(); + this.watcher = new Watcher(); + this.rm = new RoleManager(); + this.enabled = false; + this.autoSave = false; + this.autoBuildRoleLinks = false; + } + + public newModel(): Model { + return new Model(); + } private initialize(): void {} } diff --git a/src/model.ts b/src/model.ts index 92bc3529..f72398f6 100644 --- a/src/model.ts +++ b/src/model.ts @@ -12,18 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Config from './config'; +import { Config } from './config'; export class Model { - private sectionNameMap: { [index: string]: string } + private sectionNameMap: { [index: string]: string }; - constructor() {} + constructor() { + this.sectionNameMap = {}; + } private loadAssertion( model: Model, cfg: Config, sec: string, - key: string, + key: string ): boolean { return true; } diff --git a/src/policy.ts b/src/policy.ts index 5c0c14b1..c99bcb1b 100644 --- a/src/policy.ts +++ b/src/policy.ts @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -import RoleManager from './role_manager'; +import { RoleManager } from './roleManager'; export class Policy { - public model: { [index: string]: string }; + public model: { [index: string]: string } = {}; public buildRoleLinks(rm: RoleManager): void {} @@ -31,7 +31,7 @@ export class Policy { sec: string, ptype: string, fieldIndex: number, - ...fieldValues: string[], + ...fieldValues: string[] ): string[][] { return []; } @@ -52,7 +52,7 @@ export class Policy { sec: string, ptype: string, fieldIndex: number, - ...fieldValues: string[], + ...fieldValues: string[] ): boolean { return true; } @@ -60,7 +60,7 @@ export class Policy { public getValuesForFieldInPolicy( sec: string, ptype: string, - fieldIndex: number, + fieldIndex: number ): string[] { return []; } diff --git a/src/watcher.ts b/src/watcher.ts index 06fb0b8e..f7ed8b15 100644 --- a/src/watcher.ts +++ b/src/watcher.ts @@ -17,3 +17,9 @@ export interface IWatcher { update(): void; } + +export class Watcher implements IWatcher { + public setUpdateCallback(): void {} + + public update(): void {} +} diff --git a/tslint.json b/tslint.json index 87af1451..552297c9 100644 --- a/tslint.json +++ b/tslint.json @@ -9,7 +9,8 @@ "ordered-imports": false, "object-literal-sort-keys": false, "no-empty": false, - "quotemark": [true, "single"] + "quotemark": [true, "single"], + "trailing-comma": false }, "rulesDirectory": [] } \ No newline at end of file From 393325ba615531465f8adc8a3f2a613355a1a848 Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 24 Jul 2018 00:05:00 +0800 Subject: [PATCH 018/497] :wrench: Update tslint rule --- package.json | 2 +- tslint.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index af1f109a..4b2d07c8 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ ], "lint-staged": { "*.{ts,js}": [ - "yarn tslint \"src/**/*.ts\"", + "tslint --fix", "prettier --write", "git add" ] diff --git a/tslint.json b/tslint.json index 552297c9..bb52c5b1 100644 --- a/tslint.json +++ b/tslint.json @@ -5,6 +5,7 @@ ], "jsRules": {}, "rules": { + "arrow-parens": false, "member-ordering": false, "ordered-imports": false, "object-literal-sort-keys": false, From c57cdc6c6cacc5421ca47b8456e44ce88a90d95b Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 24 Jul 2018 00:10:48 +0800 Subject: [PATCH 019/497] :sparkles: Implement effect --- src/effect/defaultEffector.ts | 66 +++++++++++++++++++++++++++++++++++ src/{ => effect}/effector.ts | 12 +------ src/effect/index.ts | 2 ++ src/enforcer.ts | 5 +-- 4 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 src/effect/defaultEffector.ts rename src/{ => effect}/effector.ts (80%) create mode 100644 src/effect/index.ts diff --git a/src/effect/defaultEffector.ts b/src/effect/defaultEffector.ts new file mode 100644 index 00000000..07b6a00c --- /dev/null +++ b/src/effect/defaultEffector.ts @@ -0,0 +1,66 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Effect, IEffector } from './effector'; + +/** + * DefaultEffector is default effector for Casbin. + */ +export class DefaultEffector implements IEffector { + /** + * DefaultEffector is the constructor for DefaultEffector. + */ + constructor() {} + + /** + * mergeEffects merges all matching results collected by the enforcer into a single decision. + * @param {string} expr + * @param {Effect[]} effects + * @param {number[]} results + * @returns {boolean} + */ + public mergeEffects( + expr: string, + effects: Effect[], + results: number[] + ): boolean { + let result = false; + + if (expr === 'some(where (p_eft == allow))') { + result = !!effects.find(n => n === Effect.Allow); + } else if (expr === '!some(where (p_eft == deny))') { + result = !effects.find(n => n === Effect.Deny); + } else if ( + expr === 'some(where (p_eft == allow)) && !some(where (p_eft == deny))' + ) { + result = false; + for (const eft of effects) { + if (eft === Effect.Allow) { + result = true; + } else if (eft === Effect.Deny) { + result = false; + break; + } + } + } else if (expr === 'priority(p_eft) || deny') { + result = !!effects.find( + n => n !== Effect.Indeterminate && n === Effect.Allow + ); + } else { + throw new Error('unsupported effect'); + } + + return result; + } +} diff --git a/src/effector.ts b/src/effect/effector.ts similarity index 80% rename from src/effector.ts rename to src/effect/effector.ts index 1b5974e8..4457ccfc 100644 --- a/src/effector.ts +++ b/src/effect/effector.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -enum Effect { +export enum Effect { Allow = 1, Indeterminate, Deny @@ -21,13 +21,3 @@ enum Effect { export interface IEffector { mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; } - -export class Effector implements IEffector { - public mergeEffects( - expr: string, - effects: Effect[], - results: number[] - ): boolean { - return false; - } -} diff --git a/src/effect/index.ts b/src/effect/index.ts new file mode 100644 index 00000000..f16ee1f3 --- /dev/null +++ b/src/effect/index.ts @@ -0,0 +1,2 @@ +export * from './defaultEffector'; +export * from './effector'; diff --git a/src/enforcer.ts b/src/enforcer.ts index a472710a..b2e367f9 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -14,10 +14,11 @@ import { Model } from './model'; import { FunctionMap } from './functionMap'; -import { Effector, IEffector } from './effector'; +import { IEffector } from './effect'; import { Adapter, IAdapter } from './adapter'; import { IWatcher, Watcher } from './watcher'; import { RoleManager } from './roleManager'; +import { DefaultEffector } from './effect'; export class Enforcer { protected modelPath: string; @@ -37,7 +38,7 @@ export class Enforcer { this.modelPath = ''; this.model = new Model(); this.fm = new FunctionMap(); - this.eft = new Effector(); + this.eft = new DefaultEffector(); this.adapter = new Adapter(); this.watcher = new Watcher(); this.rm = new RoleManager(); From 38300dff70815f1e9623d5d729a0d3db60035fd6 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Tue, 24 Jul 2018 19:18:21 +0800 Subject: [PATCH 020/497] :wrench: allow console.log --- tslint.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tslint.json b/tslint.json index bb52c5b1..35f64f6e 100644 --- a/tslint.json +++ b/tslint.json @@ -5,6 +5,7 @@ ], "jsRules": {}, "rules": { + "no-console": [false], "arrow-parens": false, "member-ordering": false, "ordered-imports": false, From 339109763bc329027b59d84a706b294d0ee9d175 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Tue, 24 Jul 2018 19:19:11 +0800 Subject: [PATCH 021/497] :heavy_plus_sign: add lodash lib --- package.json | 6 ++++-- yarn.lock | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4b2d07c8..8239f149 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,9 @@ "tslint": "^5.11.0", "typescript": "^2.9.2" }, - "dependencies": {}, + "dependencies": { + "@types/lodash": "^4.14.113" + }, "homepage": "http://casbin.org", "repository": { "type": "git", @@ -40,4 +42,4 @@ "git add" ] } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index d13a1b17..def79f16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,10 @@ version "0.0.39" resolved "http://registry.npm.taobao.org/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" +"@types/lodash@^4.14.113": + version "4.14.113" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.113.tgz#1d1cb063f17fec4cc46f1a90d978ebf441113061" + "@types/node@*": version "10.5.2" resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707" From 179a11d46aadbdb48a5f839c2bb83ac8fbd17c8e Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Tue, 24 Jul 2018 19:24:21 +0800 Subject: [PATCH 022/497] :knife: add utils --- src/effector.ts | 33 +++++++++++++++++++ src/enforcer.ts | 6 +++- src/util/index.ts | 3 ++ src/util/log.ts | 35 +++++++++++++++++++++ src/util/util.ts | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 src/effector.ts create mode 100644 src/util/index.ts create mode 100644 src/util/log.ts create mode 100644 src/util/util.ts diff --git a/src/effector.ts b/src/effector.ts new file mode 100644 index 00000000..1b5974e8 --- /dev/null +++ b/src/effector.ts @@ -0,0 +1,33 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +enum Effect { + Allow = 1, + Indeterminate, + Deny +} + +export interface IEffector { + mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; +} + +export class Effector implements IEffector { + public mergeEffects( + expr: string, + effects: Effect[], + results: number[] + ): boolean { + return false; + } +} diff --git a/src/enforcer.ts b/src/enforcer.ts index b2e367f9..330fb267 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -51,5 +51,9 @@ export class Enforcer { return new Model(); } - private initialize(): void {} + private initialize(): void { + this.enabled = true; + this.autoSave = true; + this.autoBuildRoleLinks = true; + } } diff --git a/src/util/index.ts b/src/util/index.ts new file mode 100644 index 00000000..3f3414c9 --- /dev/null +++ b/src/util/index.ts @@ -0,0 +1,3 @@ +// export * from './builtin'; +export * from './log'; +export * from './util'; diff --git a/src/util/log.ts b/src/util/log.ts new file mode 100644 index 00000000..94b05101 --- /dev/null +++ b/src/util/log.ts @@ -0,0 +1,35 @@ +// Copyright 2017 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// enableLog controls whether to print log to console. +const enableLog = true; + +// logPrint prints the log. +const logPrint: (...v: any[]) => void = (...v: any[]): void => { + if (enableLog) { + console.log(...v); + } +}; + +// logPrintf prints the log with the format. +const logPrintf: (format: string, ...v: any[]) => void = ( + format: string, + ...v: any[] +): void => { + if (enableLog) { + console.log(...v); + } +}; + +export = { logPrint, logPrintf }; diff --git a/src/util/util.ts b/src/util/util.ts new file mode 100644 index 00000000..46041b38 --- /dev/null +++ b/src/util/util.ts @@ -0,0 +1,80 @@ +// Copyright 2017 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { _ } from 'lodash'; + +// escapeAssertion escapes the dots in the assertion, +// because the expression evaluation doesn't support such variable names. + +const escapeAssertion: (s: string) => string = (s: string) => { + s = s.replace(/r\./g, 'r_'); + s = s.replace(/p\./g, 'p_'); + return s; +}; + +// removeComments removes the comments starting with # in the text. +const removeComments: (s: string) => string = (s: string) => { + const pos = s.indexOf('#'); + return pos > -1 ? _.trim(s.slice(0, pos)) : s; +}; + +// arrayEquals determines whether two string arrays are identical. +const arrayEquals: (a: string[], b: string[]) => boolean = ( + a: string[], + b: string[] +) => { + return _.isEqual(a, b); +}; + +// array2DEquals determines whether two 2-dimensional string arrays are identical. +const array2DEquals: (a: string[][], b: string[][]) => boolean = ( + a: string[][], + b: string[][] +) => { + return _.isEqual(a, b); +}; + +// arrayRemoveDuplicates removes any duplicated elements in a string array. +const arrayRemoveDuplicates: (s: string) => string[] = (s: string) => { + return _.uniq(s); +}; + +// arrayToString gets a printable string for a string array. +const arrayToString: (a: string[]) => string = (a: string[]) => { + return _.join(a, ', '); +}; + +// paramsToString gets a printable string for variable number of parameters. +const paramsToString: (...v: string) => string = (...v: string) => { + return _.join(v, ', '); +}; + +// setEquals determines whether two string sets are identical. +const setEquals: (a: string[], b: string[]) => boolean = ( + a: string[], + b: string[] +) => { + return _.isEqual(_.sortedUniq(a), _.sortedUniq(b)); +}; + +export = { + escapeAssertion, + removeComments, + arrayEquals, + array2DEquals, + arrayRemoveDuplicates, + arrayToString, + paramsToString, + setEquals +}; From 594bd0c713141f8e3e231ea04c2233e60f4e2819 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Tue, 24 Jul 2018 20:03:26 +0800 Subject: [PATCH 023/497] :pencil: fix syntax typo --- src/util/log.ts | 2 +- src/util/util.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util/log.ts b/src/util/log.ts index 94b05101..74f10f1a 100644 --- a/src/util/log.ts +++ b/src/util/log.ts @@ -32,4 +32,4 @@ const logPrintf: (format: string, ...v: any[]) => void = ( } }; -export = { logPrint, logPrintf }; +export { logPrint, logPrintf }; diff --git a/src/util/util.ts b/src/util/util.ts index 46041b38..2a344ccd 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { _ } from 'lodash'; +import * as _ from 'lodash'; // escapeAssertion escapes the dots in the assertion, // because the expression evaluation doesn't support such variable names. @@ -56,7 +56,7 @@ const arrayToString: (a: string[]) => string = (a: string[]) => { }; // paramsToString gets a printable string for variable number of parameters. -const paramsToString: (...v: string) => string = (...v: string) => { +const paramsToString: (...v: string[]) => string = (...v: string[]) => { return _.join(v, ', '); }; @@ -68,7 +68,7 @@ const setEquals: (a: string[], b: string[]) => boolean = ( return _.isEqual(_.sortedUniq(a), _.sortedUniq(b)); }; -export = { +export { escapeAssertion, removeComments, arrayEquals, From 8ee640b9e84e0022f796cb32abd414261a92fb81 Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 24 Jul 2018 23:03:09 +0800 Subject: [PATCH 024/497] :sparkles: Implement rbac --- src/effect/defaultEffector.ts | 4 +- src/effect/effector.ts | 2 +- src/effect/index.ts | 14 ++ src/enforcer.ts | 9 +- src/policy.ts | 2 +- src/rbac/defaultRoleManager.ts | 215 ++++++++++++++++++++++++++ src/{roleManager.ts => rbac/index.ts} | 3 +- src/rbac/roleManager.ts | 36 +++++ tslint.json | 2 + 9 files changed, 278 insertions(+), 9 deletions(-) create mode 100644 src/rbac/defaultRoleManager.ts rename src/{roleManager.ts => rbac/index.ts} (89%) create mode 100644 src/rbac/roleManager.ts diff --git a/src/effect/defaultEffector.ts b/src/effect/defaultEffector.ts index 07b6a00c..ce16b84d 100644 --- a/src/effect/defaultEffector.ts +++ b/src/effect/defaultEffector.ts @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Effect, IEffector } from './effector'; +import { Effect, Effector } from './effector'; /** * DefaultEffector is default effector for Casbin. */ -export class DefaultEffector implements IEffector { +export class DefaultEffector implements Effector { /** * DefaultEffector is the constructor for DefaultEffector. */ diff --git a/src/effect/effector.ts b/src/effect/effector.ts index 4457ccfc..b4db6e56 100644 --- a/src/effect/effector.ts +++ b/src/effect/effector.ts @@ -18,6 +18,6 @@ export enum Effect { Deny } -export interface IEffector { +export interface Effector { mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; } diff --git a/src/effect/index.ts b/src/effect/index.ts index f16ee1f3..0b92b928 100644 --- a/src/effect/index.ts +++ b/src/effect/index.ts @@ -1,2 +1,16 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + export * from './defaultEffector'; export * from './effector'; diff --git a/src/enforcer.ts b/src/enforcer.ts index b2e367f9..e83d60e6 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -14,17 +14,18 @@ import { Model } from './model'; import { FunctionMap } from './functionMap'; -import { IEffector } from './effect'; +import { Effector } from './effect'; import { Adapter, IAdapter } from './adapter'; import { IWatcher, Watcher } from './watcher'; -import { RoleManager } from './roleManager'; +import { RoleManager } from './rbac'; import { DefaultEffector } from './effect'; +import { DefaultRoleManager } from './rbac'; export class Enforcer { protected modelPath: string; public model: Model; protected fm: FunctionMap; - private eft: IEffector; + private eft: Effector; protected adapter: IAdapter; protected watcher: IWatcher; @@ -41,7 +42,7 @@ export class Enforcer { this.eft = new DefaultEffector(); this.adapter = new Adapter(); this.watcher = new Watcher(); - this.rm = new RoleManager(); + this.rm = new DefaultRoleManager(); this.enabled = false; this.autoSave = false; this.autoBuildRoleLinks = false; diff --git a/src/policy.ts b/src/policy.ts index c99bcb1b..93a22ba6 100644 --- a/src/policy.ts +++ b/src/policy.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { RoleManager } from './roleManager'; +import { RoleManager } from './rbac/roleManager'; export class Policy { public model: { [index: string]: string } = {}; diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts new file mode 100644 index 00000000..6e65f770 --- /dev/null +++ b/src/rbac/defaultRoleManager.ts @@ -0,0 +1,215 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { RoleManager } from './roleManager'; + +// RoleManager provides a default implementation for the RoleManager interface +export class DefaultRoleManager implements RoleManager { + private allRoles: Map; + private maxHierarchyLevel: number; + + /** + * DefaultRoleManager is the constructor for creating an instance of the + * default RoleManager implementation. + * + * @param maxHierarchyLevel the maximized allowed RBAC hierarchy level. + */ + constructor(maxHierarchyLevel: number) { + this.allRoles = new Map(); + this.maxHierarchyLevel = maxHierarchyLevel; + } + + /** + * addLink adds the inheritance link between role: name1 and role: name2. + * aka role: name1 inherits role: name2. + * domain is a prefix to the roles. + */ + public addLink(name1: string, name2: string, ...domain: string[]): void { + if (domain.length === 1) { + name1 = domain[0] + '::' + name1; + name2 = domain[0] + '::' + name2; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + const role1 = this.createRole(name1); + const role2 = this.createRole(name2); + role1.addRole(role2); + } + + /** + * clear clears all stored data and resets the role manager to the initial state. + */ + public clear(): void { + this.allRoles = new Map(); + } + + /** + * deleteLink deletes the inheritance link between role: name1 and role: name2. + * aka role: name1 does not inherit role: name2 any more. + * domain is a prefix to the roles. + */ + public deleteLink(name1: string, name2: string, ...domain: string[]): void { + if (domain.length === 1) { + name1 = domain[0] + '::' + name1; + name2 = domain[0] + '::' + name2; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + if (!this.hasRole(name1) || !this.hasRole(name2)) { + throw new Error('error: name1 or name2 does not exist'); + } + + const role1 = this.createRole(name1); + const role2 = this.createRole(name2); + role1.deleteRole(role2); + } + + /** + * getRoles gets the roles that a subject inherits. + * domain is a prefix to the roles. + */ + public getRoles(name: string, ...domain: string[]): string[] { + if (domain.length === 1) { + name = domain[0] + '::' + name; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + if (!this.hasRole(name)) { + throw new Error('error: name does not exist'); + } + + let roles = this.createRole(name).getRoles(); + if (domain.length === 1) { + roles = roles.map(n => n.substring(domain[0].length + 2, n.length)); + } + + return roles; + } + + /** + * getUsers gets the users that inherits a subject. + * domain is an unreferenced parameter here, may be used in other implementations. + */ + public getUsers(name: string, ...domain: string[]): string[] { + if (!this.hasRole(name)) { + throw new Error('error: name does not exist'); + } + + return [...this.allRoles.values()] + .filter(n => n.hasDirectRole(name)) + .map(n => n.name); + } + + /** + * hasLink determines whether role: name1 inherits role: name2. + * domain is a prefix to the roles. + */ + public hasLink(name1: string, name2: string, ...domain: string[]): boolean { + if (domain.length === 1) { + name1 = domain[0] + '::' + name1; + name2 = domain[0] + '::' + name2; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + if (name1 === name2) { + return true; + } + + if (!this.hasRole(name1) || !this.hasRole(name2)) { + return false; + } + + const role1 = this.createRole(name1); + + return role1.hasRole(name2, this.maxHierarchyLevel); + } + + /** + * printRoles prints all the roles to log. + */ + public printRoles(): void { + // TODO code + } + + private createRole(name: string): Role { + const role = this.allRoles.get(name); + if (role) { + return role; + } else { + const newRole = new Role(name); + this.allRoles.set(name, newRole); + return newRole; + } + } + + private hasRole(name: string) { + return !!this.allRoles.get(name); + } +} + +/** + * Role represents the data structure for a role in RBAC. + */ +class Role { + public name: string; + private roles: Role[]; + + constructor(name: string) { + this.name = name; + this.roles = []; + } + + public addRole(role: Role): void { + if (this.roles.some(n => n.name === role.name)) { + return; + } + this.roles.push(role); + } + + public deleteRole(role: Role): void { + this.roles = this.roles.filter(n => n.name !== role.name); + } + + public hasRole(name: string, hierarchyLevel: number): boolean { + if (this.name === name) { + return true; + } + if (hierarchyLevel <= 0) { + return false; + } + for (const role of this.roles) { + if (role.hasRole(name, hierarchyLevel - 1)) { + return true; + } + } + + return false; + } + + public hasDirectRole(name: string): boolean { + return this.roles.some(n => n.name === name); + } + + public toString(): string { + return this.name + this.roles.join(', '); + } + + public getRoles(): string[] { + return this.roles.map(n => n.name); + } +} diff --git a/src/roleManager.ts b/src/rbac/index.ts similarity index 89% rename from src/roleManager.ts rename to src/rbac/index.ts index ec068f16..a2e1042c 100644 --- a/src/roleManager.ts +++ b/src/rbac/index.ts @@ -12,4 +12,5 @@ // See the License for the specific language governing permissions and // limitations under the License. -export class RoleManager {} +export * from './defaultRoleManager'; +export * from './roleManager'; diff --git a/src/rbac/roleManager.ts b/src/rbac/roleManager.ts new file mode 100644 index 00000000..84e8a810 --- /dev/null +++ b/src/rbac/roleManager.ts @@ -0,0 +1,36 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// RoleManager provides interface to define the operations for managing roles. +export interface RoleManager { + // Clear clears all stored data and resets the role manager to the initial state. + clear(): void; + // AddLink adds the inheritance link between two roles. role: name1 and role: name2. + // domain is a prefix to the roles (can be used for other purposes). + addLink(name1: string, name2: string, ...domain: string[]): void; + // DeleteLink deletes the inheritance link between two roles. role: name1 and role: name2. + // domain is a prefix to the roles (can be used for other purposes). + deleteLink(name1: string, name2: string, ...domain: string[]): void; + // HasLink determines whether a link exists between two roles. role: name1 inherits role: name2. + // domain is a prefix to the roles (can be used for other purposes). + hasLink(name1: string, name2: string, ...domain: string[]): boolean; + // GetRoles gets the roles that a user inherits. + // domain is a prefix to the roles (can be used for other purposes). + getRoles(name: string, ...domain: string[]): string[]; + // GetUsers gets the users that inherits a role. + // domain is a prefix to the users (can be used for other purposes). + getUsers(name: string, ...domain: string[]): string[]; + // PrintRoles prints all the roles to log. + printRoles(): void; +} diff --git a/tslint.json b/tslint.json index bb52c5b1..91b45363 100644 --- a/tslint.json +++ b/tslint.json @@ -5,6 +5,8 @@ ], "jsRules": {}, "rules": { + "max-classes-per-file": false, + "interface-name": false, "arrow-parens": false, "member-ordering": false, "ordered-imports": false, From 9902ef873232b6a16b15139bc9f258b7626bd22b Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 24 Jul 2018 23:31:32 +0800 Subject: [PATCH 025/497] :heavy_plus_sign: Add lodash library --- package.json | 3 ++- yarn.lock | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8239f149..e0d792a8 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "typescript": "^2.9.2" }, "dependencies": { - "@types/lodash": "^4.14.113" + "@types/lodash": "^4.14.113", + "lodash": "^4.17.10" }, "homepage": "http://casbin.org", "repository": { diff --git a/yarn.lock b/yarn.lock index def79f16..fa8c4b71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -790,7 +790,7 @@ listr@^0.14.1: rxjs "^6.1.0" strip-ansi "^3.0.1" -lodash@^4.17.5: +lodash@^4.17.10, lodash@^4.17.5: version "4.17.10" resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" From a2cb12fe225ce6dee601267ec51eb31d667eea94 Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 24 Jul 2018 23:35:43 +0800 Subject: [PATCH 026/497] :sparkles: Implement the printRoles method --- src/rbac/defaultRoleManager.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 6e65f770..b9168b47 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -13,6 +13,7 @@ // limitations under the License. import { RoleManager } from './roleManager'; +import { logPrint } from '../util'; // RoleManager provides a default implementation for the RoleManager interface export class DefaultRoleManager implements RoleManager { @@ -143,7 +144,9 @@ export class DefaultRoleManager implements RoleManager { * printRoles prints all the roles to log. */ public printRoles(): void { - // TODO code + [...this.allRoles.values()].map(n => { + logPrint(n.toString()); + }); } private createRole(name: string): Role { From 073be7c6afb30f7dff0a0bad0424a0526e1f28af Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 25 Jul 2018 11:19:32 +0800 Subject: [PATCH 027/497] :heavy_plus_sign: add node-ip lib --- package.json | 2 ++ yarn.lock | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/package.json b/package.json index e0d792a8..37e4c6e4 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,9 @@ "typescript": "^2.9.2" }, "dependencies": { + "@types/ip": "^0.0.31", "@types/lodash": "^4.14.113", + "ip": "^1.1.5", "lodash": "^4.17.10" }, "homepage": "http://casbin.org", diff --git a/yarn.lock b/yarn.lock index fa8c4b71..bd2f359a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,12 @@ version "0.0.39" resolved "http://registry.npm.taobao.org/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" +"@types/ip@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" + dependencies: + "@types/node" "*" + "@types/lodash@^4.14.113": version "4.14.113" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.113.tgz#1d1cb063f17fec4cc46f1a90d978ebf441113061" @@ -507,6 +513,10 @@ inherits@2: version "2.0.3" resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" From 2b69c294509d37c64d1f3d8a5834872219968d1e Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 25 Jul 2018 11:22:22 +0800 Subject: [PATCH 028/497] :knife: add bultin operators util --- src/util/index.ts | 2 +- src/util/operators.ts | 217 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 src/util/operators.ts diff --git a/src/util/index.ts b/src/util/index.ts index 3f3414c9..3f9d3aa8 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -1,3 +1,3 @@ -// export * from './builtin'; +export * from './operators'; export * from './log'; export * from './util'; diff --git a/src/util/operators.ts b/src/util/operators.ts new file mode 100644 index 00000000..3e3ad7f4 --- /dev/null +++ b/src/util/operators.ts @@ -0,0 +1,217 @@ +// Copyright 2017 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as rbac from '../rbac'; +import * as ip from 'ip'; +import * as _ from 'lodash'; + +// keyMatch determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. +// For example, '/foo/bar' matches '/foo/*' +const keyMatch: (key1: string, key2: string) => boolean = ( + key1: string, + key2: string +) => { + const pos: number = key2.indexOf('*'); + try { + if (pos === -1) { + return key1 === key2; + } + + if (key1.length > pos) { + return key1.slice(0, pos) === key2.slice(0, pos); + } + + return key1 === key2.slice(0, pos); + } catch (e) { + throw e; + } +}; + +// keyMatchFunc is the wrapper for keyMatch. +const keyMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { + try { + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); + + return keyMatch(name1, name2); + } catch (e) { + throw e; + } +}; + +// keyMatch2 determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. +// For example, '/foo/bar' matches '/foo/*', '/resource1' matches '/:resource' +const keyMatch2: (key1: string, key2: string) => boolean = ( + key1: string, + key2: string +) => { + try { + key2 = key2.replace('//*/g', '/.*'); + + const regexp = new RegExp(/(.*):[^/]+(.*)/g); + for (;;) { + if (!_.includes(key2, '/:')) { + break; + } + key2 = '^' + key2.replace(regexp, '$1[^/]+$2') + '$'; + } + + return regexMatch(key1, key2); + } catch (e) { + throw e; + } +}; + +// keyMatch2Func is the wrapper for keyMatch2. +const keyMatch2Func: (...args: any[]) => boolean = (...args: any[]) => { + try { + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); + + return keyMatch2(name1, name2); + } catch (e) { + throw e; + } +}; + +// keyMatch3 determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. +// For example, '/foo/bar' matches '/foo/*', '/resource1' matches '/{resource}' +const keyMatch3: (key1: string, key2: string) => boolean = ( + key1: string, + key2: string +) => { + try { + key2 = key2.replace('//*/g', '/.*'); + + const regexp = new RegExp(/(.*)\{[^/]+\}(.*)/g); + for (;;) { + if (!_.includes(key2, '/{')) { + break; + } + key2 = key2.replace(regexp, '$1[^/]+$2'); + } + + return regexMatch(key1, key2); + } catch (e) { + throw e; + } +}; + +// keyMatch3Func is the wrapper for keyMatch3. +const keyMatch3Func: (...args: any[]) => boolean = (...args: any[]) => { + try { + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); + + return keyMatch3(name1, name2); + } catch (e) { + throw e; + } +}; + +// regexMatch determines whether key1 matches the pattern of key2 in regular expression. +const regexMatch: (key1: string, key2: string) => boolean = ( + key1: string, + key2: string +) => { + try { + return new RegExp(key2).test(key1); // key1.match(key2); + } catch (e) { + throw e; + } +}; + +// regexMatchFunc is the wrapper for RegexMatch. +const regexMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { + try { + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); + + return keyMatch3(name1, name2); + } catch (e) { + throw e; + } +}; + +// IPMatch determines whether IP address ip1 matches the pattern of IP address ip2, +// ip2 can be an IP address or a CIDR pattern. +// For example, '192.168.2.123' matches '192.168.2.0/24' +const IPMatch: (ip1: string, ip2: string) => boolean = ( + ip1: string, + ip2: string +) => { + try { + // check ip1 + if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { + throw new Error( + 'invalid argument: ip1 in IPMatch() function is not an IP address.' + ); + } + // check ip2 + const cidrParts = ip2.split('/'); + if (cidrParts.length === 2) { + return ip.cidrSubnet(ip2).contains(ip1); + } else { + if (!(ip.isV4Format(ip2) || ip.isV6Format(ip2))) { + throw new Error( + 'invalid argument: ip2 in IPMatch() function is not an IP address.' + ); + } + return ip.isEqual(ip1, ip2); + } + } catch (e) { + throw e; + } +}; + +// IPMatchFunc is the wrapper for IPMatch. +const IPMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { + try { + const ip1: string = _.toString(args[0]); + const ip2: string = _.toString(args[1]); + + return IPMatch(ip1, ip2); + } catch (e) { + throw e; + } +}; + +// generateGFunction is the factory method of the g(_, _) function. +const generateGFunction: (rm: rbac.RoleManager) => any = ( + rm: rbac.RoleManager +) => { + const func: (...args: any[]) => boolean = (...args: any[]) => { + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); + + if (!rm) { + return name1 === name2; + } else if (args.length === 2) { + return rm.hasLink(name1, name2); + } else { + const domain: string = _.toString(args[2]); + return rm.hasLink(name1, name2, domain); + } + }; + return func; +}; + +export { + keyMatchFunc, + keyMatch2Func, + keyMatch3Func, + regexMatchFunc, + IPMatchFunc, + generateGFunction +}; From 95710ca02fbcb928079ac397ebb567f9d563a54a Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 25 Jul 2018 14:30:20 +0800 Subject: [PATCH 029/497] :art: optimize code --- src/util/operators.ts | 156 ++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 97 deletions(-) diff --git a/src/util/operators.ts b/src/util/operators.ts index 3e3ad7f4..8fd0924b 100644 --- a/src/util/operators.ts +++ b/src/util/operators.ts @@ -16,73 +16,59 @@ import * as rbac from '../rbac'; import * as ip from 'ip'; import * as _ from 'lodash'; -// keyMatch determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. +// keyMatch determines whether key1 matches the pattern of key2 (similar to RESTful path), +// key2 can contain a *. // For example, '/foo/bar' matches '/foo/*' const keyMatch: (key1: string, key2: string) => boolean = ( key1: string, key2: string ) => { const pos: number = key2.indexOf('*'); - try { - if (pos === -1) { - return key1 === key2; - } - - if (key1.length > pos) { - return key1.slice(0, pos) === key2.slice(0, pos); - } + if (pos === -1) { + return key1 === key2; + } - return key1 === key2.slice(0, pos); - } catch (e) { - throw e; + if (key1.length > pos) { + return key1.slice(0, pos) === key2.slice(0, pos); } + + return key1 === key2.slice(0, pos); }; // keyMatchFunc is the wrapper for keyMatch. const keyMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { - try { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); - return keyMatch(name1, name2); - } catch (e) { - throw e; - } + return keyMatch(name1, name2); }; -// keyMatch2 determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. +// keyMatch2 determines whether key1 matches the pattern of key2 (similar to RESTful path), +// key2 can contain a *. // For example, '/foo/bar' matches '/foo/*', '/resource1' matches '/:resource' const keyMatch2: (key1: string, key2: string) => boolean = ( key1: string, key2: string ) => { - try { - key2 = key2.replace('//*/g', '/.*'); - - const regexp = new RegExp(/(.*):[^/]+(.*)/g); - for (;;) { - if (!_.includes(key2, '/:')) { - break; - } - key2 = '^' + key2.replace(regexp, '$1[^/]+$2') + '$'; - } + key2 = key2.replace('//*/g', '/.*'); - return regexMatch(key1, key2); - } catch (e) { - throw e; + const regexp: RegExp = new RegExp(/(.*):[^/]+(.*)/g); + for (;;) { + if (!_.includes(key2, '/:')) { + break; + } + key2 = '^' + key2.replace(regexp, '$1[^/]+$2') + '$'; } + + return regexMatch(key1, key2); }; // keyMatch2Func is the wrapper for keyMatch2. const keyMatch2Func: (...args: any[]) => boolean = (...args: any[]) => { - try { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); - return keyMatch2(name1, name2); - } catch (e) { - throw e; - } + return keyMatch2(name1, name2); }; // keyMatch3 determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. @@ -91,33 +77,25 @@ const keyMatch3: (key1: string, key2: string) => boolean = ( key1: string, key2: string ) => { - try { - key2 = key2.replace('//*/g', '/.*'); - - const regexp = new RegExp(/(.*)\{[^/]+\}(.*)/g); - for (;;) { - if (!_.includes(key2, '/{')) { - break; - } - key2 = key2.replace(regexp, '$1[^/]+$2'); - } + key2 = key2.replace('//*/g', '/.*'); - return regexMatch(key1, key2); - } catch (e) { - throw e; + const regexp: RegExp = new RegExp(/(.*){[^/]+}(.*)/g); + for (;;) { + if (!_.includes(key2, '/{')) { + break; + } + key2 = key2.replace(regexp, '$1[^/]+$2'); } + + return regexMatch(key1, key2); }; // keyMatch3Func is the wrapper for keyMatch3. const keyMatch3Func: (...args: any[]) => boolean = (...args: any[]) => { - try { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); - return keyMatch3(name1, name2); - } catch (e) { - throw e; - } + return keyMatch3(name1, name2); }; // regexMatch determines whether key1 matches the pattern of key2 in regular expression. @@ -125,23 +103,15 @@ const regexMatch: (key1: string, key2: string) => boolean = ( key1: string, key2: string ) => { - try { - return new RegExp(key2).test(key1); // key1.match(key2); - } catch (e) { - throw e; - } + return new RegExp(key2).test(key1); // key1.match(key2); }; // regexMatchFunc is the wrapper for RegexMatch. const regexMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { - try { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); - return keyMatch3(name1, name2); - } catch (e) { - throw e; - } + return keyMatch3(name1, name2); }; // IPMatch determines whether IP address ip1 matches the pattern of IP address ip2, @@ -151,40 +121,32 @@ const IPMatch: (ip1: string, ip2: string) => boolean = ( ip1: string, ip2: string ) => { - try { - // check ip1 - if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { + // check ip1 + if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { + throw new Error( + 'invalid argument: ip1 in IPMatch() function is not an IP address.' + ); + } + // check ip2 + const cidrParts: string[] = ip2.split('/'); + if (cidrParts.length === 2) { + return ip.cidrSubnet(ip2).contains(ip1); + } else { + if (!(ip.isV4Format(ip2) || ip.isV6Format(ip2))) { throw new Error( - 'invalid argument: ip1 in IPMatch() function is not an IP address.' + 'invalid argument: ip2 in IPMatch() function is not an IP address.' ); } - // check ip2 - const cidrParts = ip2.split('/'); - if (cidrParts.length === 2) { - return ip.cidrSubnet(ip2).contains(ip1); - } else { - if (!(ip.isV4Format(ip2) || ip.isV6Format(ip2))) { - throw new Error( - 'invalid argument: ip2 in IPMatch() function is not an IP address.' - ); - } - return ip.isEqual(ip1, ip2); - } - } catch (e) { - throw e; + return ip.isEqual(ip1, ip2); } }; // IPMatchFunc is the wrapper for IPMatch. const IPMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { - try { - const ip1: string = _.toString(args[0]); - const ip2: string = _.toString(args[1]); + const ip1: string = _.toString(args[0]); + const ip2: string = _.toString(args[1]); - return IPMatch(ip1, ip2); - } catch (e) { - throw e; - } + return IPMatch(ip1, ip2); }; // generateGFunction is the factory method of the g(_, _) function. From 9260cd11fed3984a0a21374dc237a7a0dc651017 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 25 Jul 2018 14:54:58 +0800 Subject: [PATCH 030/497] :pencil: Add code comments --- src/effect/effector.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/effect/effector.ts b/src/effect/effector.ts index b4db6e56..e8dc2ad9 100644 --- a/src/effect/effector.ts +++ b/src/effect/effector.ts @@ -12,12 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Values for policy effect. export enum Effect { Allow = 1, Indeterminate, Deny } +// Effector is the interface for Casbin effectors. export interface Effector { + // mergeEffects merges all matching results collected by the enforcer into a single decision. mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; } From d906fd4455575fb165bf3a011cdb3913b111319e Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 25 Jul 2018 16:25:20 +0800 Subject: [PATCH 031/497] :sparkles: add functionMap for model --- src/functionMap.ts | 15 ------------ src/model/functionMap.ts | 51 ++++++++++++++++++++++++++++++++++++++++ src/util/operators.ts | 4 ++-- 3 files changed, 53 insertions(+), 17 deletions(-) delete mode 100644 src/functionMap.ts create mode 100644 src/model/functionMap.ts diff --git a/src/functionMap.ts b/src/functionMap.ts deleted file mode 100644 index ae05645e..00000000 --- a/src/functionMap.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -export class FunctionMap {} diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts new file mode 100644 index 00000000..9d9d2f27 --- /dev/null +++ b/src/model/functionMap.ts @@ -0,0 +1,51 @@ +// Copyright 2017 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as util from '../util'; + +// FunctionMap represents the collection of Function. +class FunctionMap { + private functions: Map; + + /** + * constructor is the constructor for FunctionMap. + */ + constructor() { + this.functions = new Map(); + } + + // addFunction adds an expression function. + public addFunction(name: string, func: any): void { + if (!this.functions.get(name)) { + this.functions.set(name, func); + } + } + + // getFunctions return all functions. + public getFunctions(): any { + return this.functions; + } +} + +// LoadFunctionMap loads an initial function map. +export function LoadFunctionMap() { + const fm = new FunctionMap(); + + fm.addFunction('keyMatch', util.keyMatchFunc); + fm.addFunction('keyMatch2', util.keyMatch2Func); + fm.addFunction('regexMatch', util.regexMatchFunc); + fm.addFunction('ipMatch', util.IPMatchFunc); + + return fm.getFunctions(); +} diff --git a/src/util/operators.ts b/src/util/operators.ts index 8fd0924b..677ab189 100644 --- a/src/util/operators.ts +++ b/src/util/operators.ts @@ -50,7 +50,7 @@ const keyMatch2: (key1: string, key2: string) => boolean = ( key1: string, key2: string ) => { - key2 = key2.replace('//*/g', '/.*'); + key2 = key2.replace(/\/\*/g, '/.*'); const regexp: RegExp = new RegExp(/(.*):[^/]+(.*)/g); for (;;) { @@ -77,7 +77,7 @@ const keyMatch3: (key1: string, key2: string) => boolean = ( key1: string, key2: string ) => { - key2 = key2.replace('//*/g', '/.*'); + key2 = key2.replace(/\/\*/g, '/.*'); const regexp: RegExp = new RegExp(/(.*){[^/]+}(.*)/g); for (;;) { From 9eab416aefc48d57a73a5103f0dd9f3daa868f8f Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 25 Jul 2018 17:27:07 +0800 Subject: [PATCH 032/497] :art: Format tsconfig --- tsconfig.json | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index e3255be0..11701bef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,11 @@ { - "compilerOptions": { - "target": "es6", - "module": "esnext", - "moduleResolution": "node", - "declaration": true, - "strict": true, - "outDir": "lib/es6" - }, - "include": [ - "src/**/*.ts" - ] -} \ No newline at end of file + "compilerOptions": { + "target": "es6", + "module": "esnext", + "moduleResolution": "node", + "declaration": true, + "strict": true, + "outDir": "lib/es6" + }, + "include": ["src/**/*.ts"] +} From 7e375c82e4850494481ce1153a83363db4a2e158 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 25 Jul 2018 17:29:22 +0800 Subject: [PATCH 033/497] :wrench: Change dependency --- package.json | 7 ++++--- yarn.lock | 8 ++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 37e4c6e4..9c060d47 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "fix": "tslint \"src/**/*.ts\" --fix" }, "devDependencies": { - "fs-extra": "^7.0.0", + "@types/ip": "^0.0.31", + "@types/lodash": "^4.14.113", + "@types/node": "^10.5.3", "husky": "^0.14.3", "lint-staged": "^7.2.0", "prettier": "^1.13.7", @@ -22,8 +24,7 @@ "typescript": "^2.9.2" }, "dependencies": { - "@types/ip": "^0.0.31", - "@types/lodash": "^4.14.113", + "fs-extra": "^7.0.0", "ip": "^1.1.5", "lodash": "^4.17.10" }, diff --git a/yarn.lock b/yarn.lock index bd2f359a..18e4a136 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,18 +14,22 @@ "@types/ip@^0.0.31": version "0.0.31" - resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" + resolved "http://registry.npm.taobao.org/@types/ip/download/@types/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" dependencies: "@types/node" "*" "@types/lodash@^4.14.113": version "4.14.113" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.113.tgz#1d1cb063f17fec4cc46f1a90d978ebf441113061" + resolved "http://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.113.tgz#1d1cb063f17fec4cc46f1a90d978ebf441113061" "@types/node@*": version "10.5.2" resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707" +"@types/node@^10.5.3": + version "10.5.3" + resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.5.3.tgz#5bcfaf088ad17894232012877669634c06b20cc5" + ansi-escapes@^1.0.0: version "1.4.0" resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" From fd5aaf96d740db518f409770271cf8ddd376b762 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 25 Jul 2018 17:32:15 +0800 Subject: [PATCH 034/497] ::sparkles: Implement of config.ts file method --- src/config.ts | 129 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 115 insertions(+), 14 deletions(-) diff --git a/src/config.ts b/src/config.ts index 00f53b56..ab5c803a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -11,51 +11,152 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +import { readFileSync } from 'fs'; export class Config { private static DEFAULT_SECTION = 'default'; private static DEFAULT_COMMENT = '#'; private static DEFAULT_COMMENT_SEM = ';'; - private data: { [index: string]: string } = {}; + private data: Map>; - constructor() {} + constructor() { + this.data = new Map>(); + } + /** + * newConfig create an empty configuration representation from file. + * + * @param confName the path of the model file. + * @return the constructor of Config. + */ public static newConfig(confName: string): Config { - return new Config(); + const config = new Config(); + config.parse(confName); + return config; } + /** + * newConfigFromText create an empty configuration representation from text. + * + * @param text the model text. + * @return the constructor of Config. + */ public static newConfigFromText(text: string): Config { - return new Config(); + const config = new Config(); + config.parseBuffer(Buffer.from(text)); + return config; } + /** + * addConfig adds a new section->key:value to the configuration. + */ private addConfig(section: string, option: string, value: string): boolean { - return true; + if (section === '') { + section = Config.DEFAULT_SECTION; + } + const hasKey = this.data.has(section); + if (!hasKey) { + this.data.set(section, new Map()); + } + + const item = this.data.get(section); + if (item) { + item.set(option, value); + return item.has(option); + } else { + return false; + } } - private parse(fname: string): void {} + private parse(path: string): void { + const buf = readFileSync(path); + this.parseBuffer(buf); + } - private parseBuffer(buf: string): void {} + private parseBuffer(buf: Buffer): void { + let section = ''; + const lines = buf.toString().split('\r'); + lines.forEach((n, index) => { + const line = n.trim(); + if (line.startsWith(Config.DEFAULT_COMMENT)) { + return; + } else if (line.startsWith(Config.DEFAULT_COMMENT_SEM)) { + return; + } else if (line.startsWith('[') && line.endsWith(']')) { + section = line.substring(1, line.length - 1); + } else { + const optionVal = line.split('=', 2); + if (optionVal.length !== 2) { + throw new Error( + `parse the content error : line ${index + 1} , %s = ${ + optionVal[0] + } ` + ); + } + const option = optionVal[0].trim(); + const value = optionVal[1].trim(); + this.addConfig(section, option, value); + } + }); + } public getBool(key: string): boolean { - return true; + return !!this.get(key); } - public getNumber(key: string): number { - return 0; + public getInt(key: string): number { + return Number.parseInt(this.get(key), 10); + } + + public getFloat(key: string): number { + return Number.parseFloat(this.get(key)); } public getString(key: string): string { - return ''; + return this.get(key); } public getStrings(key: string): string[] { - return []; + const v = this.get(key); + return v.split(','); } - public set(key: string, value: string): void {} + public set(key: string, value: string): void { + if (!key) { + throw new Error('key is empty'); + } + + let section = ''; + let option; + + const keys = key.toLowerCase().split('::'); + if (keys.length >= 2) { + section = keys[0]; + option = keys[1]; + } else { + option = keys[0]; + } + + this.addConfig(section, option, value); + } public get(key: string): string { - return ''; + let section; + let option; + + const keys = key.toLowerCase().split('::'); + if (keys.length >= 2) { + section = keys[0]; + option = keys[1]; + } else { + section = Config.DEFAULT_SECTION; + option = keys[0]; + } + + const item = this.data.get(section); + const itemChild = item && item.get(option); + + return itemChild ? itemChild : ''; } } From 278f2a3d6812c9781a8ab3218afa1a4d3b8ad0f4 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 25 Jul 2018 17:36:52 +0800 Subject: [PATCH 035/497] :ok_hand: Updating code --- src/effect/defaultEffector.ts | 6 +++--- src/rbac/defaultRoleManager.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/effect/defaultEffector.ts b/src/effect/defaultEffector.ts index ce16b84d..58c4d8e5 100644 --- a/src/effect/defaultEffector.ts +++ b/src/effect/defaultEffector.ts @@ -38,9 +38,9 @@ export class DefaultEffector implements Effector { let result = false; if (expr === 'some(where (p_eft == allow))') { - result = !!effects.find(n => n === Effect.Allow); + result = effects.some(n => n === Effect.Allow); } else if (expr === '!some(where (p_eft == deny))') { - result = !effects.find(n => n === Effect.Deny); + result = !effects.some(n => n === Effect.Deny); } else if ( expr === 'some(where (p_eft == allow)) && !some(where (p_eft == deny))' ) { @@ -54,7 +54,7 @@ export class DefaultEffector implements Effector { } } } else if (expr === 'priority(p_eft) || deny') { - result = !!effects.find( + result = effects.some( n => n !== Effect.Indeterminate && n === Effect.Allow ); } else { diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index b9168b47..6250f2d1 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -161,7 +161,7 @@ export class DefaultRoleManager implements RoleManager { } private hasRole(name: string) { - return !!this.allRoles.get(name); + return this.allRoles.has(name); } } From 4f0cb8ac1ceeba99dcaf18e28843d6e308ea1407 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 25 Jul 2018 21:27:33 +0800 Subject: [PATCH 036/497] :sparkles: add assertion for model --- src/model/assertion.ts | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/model/assertion.ts diff --git a/src/model/assertion.ts b/src/model/assertion.ts new file mode 100644 index 00000000..d7ebd33a --- /dev/null +++ b/src/model/assertion.ts @@ -0,0 +1,68 @@ +// Copyright 2017 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as rbac from '../rbac'; +import * as _ from 'lodash'; +import { logPrint } from '../util'; + +// Assertion represents an expression in a section of the model. +// For example: r = sub, obj, act +export class Assertion { + public key: string; + public value: string; + public tokens: string[]; + public policy: string[][]; + public rm: rbac.RoleManager; + + /** + * constructor is the constructor for Assertion. + */ + constructor() { + this.key = ''; + this.value = ''; + this.tokens = []; + this.policy = [[]]; + this.rm = new rbac.DefaultRoleManager(0); + } + + public buildRoleLinks(rm: rbac.RoleManager): void { + this.rm = rm; + const count = _.words(this.value, /_/g).length; + for (const rule of this.policy) { + if (count < 2) { + throw new Error( + 'the number of "_" in role definition should be at least 2' + ); + } + + if (rule.length < count) { + throw new Error('grouping policy elements do not meet role definition'); + } + + if (count === 2) { + // error intentionally ignored + this.rm.addLink(rule[0], rule[1]); + } else if (count === 3) { + // error intentionally ignored + this.rm.addLink(rule[0], rule[1], rule[2]); + } else if (count === 4) { + // error intentionally ignored + this.rm.addLink(rule[0], rule[1], rule[2], rule[3]); + } + } + + logPrint(`Role links for: ${this.key}`); + this.rm.printRoles(); + } +} From fc4a0eadd4ac104933811a96ccb4d37ab2afe83b Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 25 Jul 2018 21:27:48 +0800 Subject: [PATCH 037/497] :art: optimize code --- src/enforcer.ts | 2 +- src/model/functionMap.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 3e8bd678..197bdc6c 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -13,7 +13,7 @@ // limitations under the License. import { Model } from './model'; -import { FunctionMap } from './functionMap'; +import { FunctionMap } from './model'; import { Effector } from './effect'; import { Adapter, IAdapter } from './adapter'; import { IWatcher, Watcher } from './watcher'; diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index 9d9d2f27..ff96b0c0 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -15,7 +15,7 @@ import * as util from '../util'; // FunctionMap represents the collection of Function. -class FunctionMap { +export class FunctionMap { private functions: Map; /** From 3a9c60af0ff67daa1548ddbf9204ee5e2f28bbf3 Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 26 Jul 2018 17:12:00 +0800 Subject: [PATCH 038/497] :art: Add export all for model folder --- src/model/index.ts | 17 +++++++++++++++++ src/{ => model}/model.ts | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/model/index.ts rename src/{ => model}/model.ts (97%) diff --git a/src/model/index.ts b/src/model/index.ts new file mode 100644 index 00000000..8b1f94aa --- /dev/null +++ b/src/model/index.ts @@ -0,0 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +export * from './functionMap'; +export * from './assertion'; +export * from './model'; diff --git a/src/model.ts b/src/model/model.ts similarity index 97% rename from src/model.ts rename to src/model/model.ts index f72398f6..e2fe78f9 100644 --- a/src/model.ts +++ b/src/model/model.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Config } from './config'; +import { Config } from '../config'; export class Model { private sectionNameMap: { [index: string]: string }; From 8fe100cf3702d9971769fa0d61cdb0db88679b22 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Thu, 26 Jul 2018 19:14:15 +0800 Subject: [PATCH 039/497] :pencil2: add description --- src/util/index.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/util/index.ts b/src/util/index.ts index 3f9d3aa8..7eebf6c9 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -1,3 +1,17 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + export * from './operators'; export * from './log'; export * from './util'; From 8bbfe9cc2746a2b4cb66be7095d3200b137336d9 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Thu, 26 Jul 2018 19:15:17 +0800 Subject: [PATCH 040/497] :sparkles: add index file for model --- src/model/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/model/index.ts diff --git a/src/model/index.ts b/src/model/index.ts new file mode 100644 index 00000000..b04341c8 --- /dev/null +++ b/src/model/index.ts @@ -0,0 +1,18 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +export * from './assertion'; +export * from './functionMap'; +export * from './model'; +export * from './policy'; From ab6a5aebea09d492f0d71b33674e4827292b18fe Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 00:03:43 +0800 Subject: [PATCH 041/497] :sparkles: add model ts file for model dir --- src/model/model.ts | 104 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 15 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index e2fe78f9..aaf1358b 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -12,37 +12,111 @@ // See the License for the specific language governing permissions and // limitations under the License. +import * as util from '../util'; import { Config } from '../config'; +import { Assertion } from './assertion'; + +const sectionNameMap: { [index: string]: string } = { + r: 'request_definition', + p: 'policy_definition', + g: 'role_definition', + e: 'policy_effect', + m: 'matchers' +}; export class Model { - private sectionNameMap: { [index: string]: string }; + private model: Map>; constructor() { - this.sectionNameMap = {}; + this.model = new Map>(); } - private loadAssertion( - model: Model, - cfg: Config, - sec: string, - key: string - ): boolean { - return true; + private loadAssertion(cfg: Config, sec: string, key: string): boolean { + const secName = sectionNameMap[sec]; + const value = cfg.getString(`${secName}::${key}`); + return this.addDef(sec, key, value); + } + + private getKeySuffix(i: number): string { + if (i === 1) { + return ''; + } + + return i.toString(); + } + + private loadSection(cfg: Config, sec: string): void { + let i = 1; + for (;;) { + if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { + break; + } else { + i++; + } + } } public addDef(sec: string, key: string, value: string): boolean { + if (value === '') { + return false; + } + + const ast = new Assertion(); + ast.key = key; + ast.value = value; + + if (sec === 'r' || sec === 'p') { + const tokens = value.split(', '); + for (let i = 0; i < tokens.length; i++) { + tokens[i] = key + '_' + tokens[i]; + } + ast.tokens = tokens; + } else { + ast.value = util.removeComments(util.escapeAssertion(value)); + } + + const assertionMap = new Map(); + assertionMap.set(key, ast); + + this.model.set(sec, assertionMap); return true; } - private getKeySuffix(i: number): string { - return ''; + public loadModel(path: string): void { + const cfg = Config.newConfig(path); + + this.loadSection(cfg, 'r'); + this.loadSection(cfg, 'p'); + this.loadSection(cfg, 'e'); + this.loadSection(cfg, 'm'); + + this.loadSection(cfg, 'g'); } - private loadSection(model: Model, cfg: Config, sec: string): void {} + public loadModelFromText(text: string): void { + const cfg = Config.newConfigFromText(text); - public loadModel(path: string): void {} + this.loadSection(cfg, 'r'); + this.loadSection(cfg, 'p'); + this.loadSection(cfg, 'e'); + this.loadSection(cfg, 'm'); - public loadModelFromText(text: string): void {} + this.loadSection(cfg, 'g'); + } - public printModel(): void {} + public printModel(): void { + util.logPrint('Model:'); + for (const sec in this.model) { + if (this.model.hasOwnProperty(sec)) { + const astMap = this.model.get(sec) || new Map(); + for (const key in astMap) { + if (astMap.hasOwnProperty(key)) { + const ast = astMap.get(key); + const value = ast ? ast.value : ''; + util.logPrintf(`${sec}.${key}: ${value}`); + } + } + } + } + } } From 8b0017a85d3b1bd170d246d4dde29c3dc53a1618 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 15:52:57 +0800 Subject: [PATCH 042/497] :sparkles: :art: add policy ts file for model dir and optimize code --- src/model/functionMap.ts | 2 +- src/model/index.ts | 1 - src/model/model.ts | 193 ++++++++++++++++++++++++++++++++++++++- src/util/util.ts | 2 +- 4 files changed, 190 insertions(+), 8 deletions(-) diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index ff96b0c0..ee3644ab 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -39,7 +39,7 @@ export class FunctionMap { } // LoadFunctionMap loads an initial function map. -export function LoadFunctionMap() { +export function LoadFunctionMap(): Map { const fm = new FunctionMap(); fm.addFunction('keyMatch', util.keyMatchFunc); diff --git a/src/model/index.ts b/src/model/index.ts index b04341c8..49e67fff 100644 --- a/src/model/index.ts +++ b/src/model/index.ts @@ -15,4 +15,3 @@ export * from './assertion'; export * from './functionMap'; export * from './model'; -export * from './policy'; diff --git a/src/model/model.ts b/src/model/model.ts index aaf1358b..252930a8 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +import * as _ from 'lodash'; +import * as rbac from '../rbac'; import * as util from '../util'; import { Config } from '../config'; import { Assertion } from './assertion'; @@ -25,8 +27,13 @@ const sectionNameMap: { [index: string]: string } = { }; export class Model { + // Model represents the whole access control model. + // Mest-map is the collection of assertions, can be "r", "p", "g", "e", "m". private model: Map>; + /** + * constructor is the constructor for Model. + */ constructor() { this.model = new Map>(); } @@ -56,6 +63,7 @@ export class Model { } } + // addDef adds an assertion to the model. public addDef(sec: string, key: string, value: string): boolean { if (value === '') { return false; @@ -82,6 +90,7 @@ export class Model { return true; } + // loadModel loads the model from model CONF file. public loadModel(path: string): void { const cfg = Config.newConfig(path); @@ -93,6 +102,7 @@ export class Model { this.loadSection(cfg, 'g'); } + // loadModelFromText loads the model from the text. public loadModelFromText(text: string): void { const cfg = Config.newConfigFromText(text); @@ -104,19 +114,192 @@ export class Model { this.loadSection(cfg, 'g'); } + // printModel prints the model to the log. public printModel(): void { util.logPrint('Model:'); for (const sec in this.model) { - if (this.model.hasOwnProperty(sec)) { - const astMap = this.model.get(sec) || new Map(); + if (_.has(this.model, sec)) { + const astMap = _.get(this.model, sec); for (const key in astMap) { if (astMap.hasOwnProperty(key)) { - const ast = astMap.get(key); - const value = ast ? ast.value : ''; - util.logPrintf(`${sec}.${key}: ${value}`); + const ast = _.get(astMap, key); + util.logPrintf(`${sec}.${key}: ${ast.value}`); } } } } } + + // buildRoleLinks initializes the roles in RBAC. + public buildRoleLinks(rm: rbac.RoleManager): void { + const astMap = _.get(this.model, 'g'); + for (const key in astMap) { + if (astMap.hasOwnProperty(key)) { + const ast = _.get(astMap, key); + ast.buildRoleLinks(rm); + } + } + } + + // clearPolicy clears all current policy. + public clearPolicy(): void { + let astMap = _.get(this.model, 'p'); + for (const key in astMap) { + if (astMap.hasOwnProperty(key)) { + const ast = _.get(astMap, key); + ast.policy = []; + } + } + + astMap = _.get(this.model, 'g'); + for (const key in astMap) { + if (astMap.hasOwnProperty(key)) { + const ast = _.get(astMap, key); + ast.policy = []; + } + } + } + + // getPolicy gets all rules in a policy. + public getPolicy(sec: string, key: string): string[][] { + const astMap = _.get(this.model, sec); + const ast = _.get(astMap, key); + return ast.policy; + } + + // hasPolicy determines whether a model has the specified policy rule. + public hasPolicy(sec: string, key: string, rule: string[]): boolean { + const astMap = _.get(this.model, sec); + const ast = _.get(astMap, key); + for (const r of ast.policy) { + if (util.arrayEquals(rule, r)) { + return true; + } + } + + return false; + } + + // addPolicy adds a policy rule to the model. + public addPolicy(sec: string, key: string, rule: string[]): boolean { + if (!this.hasPolicy(sec, key, rule)) { + const astMap = _.get(this.model, sec); + const ast = _.get(astMap, key); + ast.policy.push(rule); + return true; + } + + return false; + } + + // removePolicy removes a policy rule from the model. + public removePolicy(sec: string, key: string, rule: string[]): boolean { + if (this.hasPolicy(sec, key, rule)) { + const astMap = _.get(this.model, sec); + const ast = _.get(astMap, key); + ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); + return true; + } + + return false; + } + + // getFilteredPolicy gets rules based on field filters from a policy. + public getFilteredPolicy( + sec: string, + key: string, + fieldIndex: number, + ...fieldValues: string[] + ): string[][] { + const res = []; + + const astMap = _.get(this.model, sec); + const ast = _.get(astMap, key); + for (const rule of ast.policy) { + let matched = true; + for (let i = 0; i < fieldValues.length; i++) { + const fieldValue = fieldValues[i]; + if (fieldValue !== '' && rule[fieldIndex + i] !== fieldValue) { + matched = false; + break; + } + } + + if (matched) { + res.push(rule); + } + } + + return res; + } + + // removeFilteredPolicy removes policy rules based on field filters from the model. + public removeFilteredPolicy( + sec: string, + key: string, + fieldIndex: number, + ...fieldValues: string[] + ): boolean { + const res = []; + let bool = false; + + const astMap = _.get(this.model, sec); + const ast = _.get(astMap, key); + for (const rule of ast.policy) { + let matched = true; + for (let i = 0; i < fieldValues.length; i++) { + const fieldValue = fieldValues[i]; + if (fieldValue !== '' && rule[fieldIndex + i] !== fieldValue) { + matched = false; + break; + } + } + + if (matched) { + bool = true; + } else { + res.push(rule); + } + } + ast.policy = res; + + return bool; + } + + // getValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed. + public getValuesForFieldInPolicy( + sec: string, + key: string, + fieldIndex: number + ): string[] { + const values = []; + + const astMap = _.get(this.model, sec); + const ast = _.get(astMap, key); + for (const rule of ast.policy) { + values.push(rule[fieldIndex]); + } + + return util.arrayRemoveDuplicates(values); + } + + // printPolicy prints the policy to log. + public printPolicy(): void { + util.logPrint('Policy:'); + let astMap = _.get(this.model, 'p'); + for (const key in astMap) { + if (astMap.hasOwnProperty(key)) { + const ast = _.get(astMap, key); + util.logPrint(`key, : ${ast.value}, : , ${ast.policy}`); + } + } + + astMap = _.get(this.model, 'g'); + for (const key in astMap) { + if (astMap.hasOwnProperty(key)) { + const ast = _.get(astMap, key); + util.logPrint(`key, : ${ast.value}, : , ${ast.policy}`); + } + } + } } diff --git a/src/util/util.ts b/src/util/util.ts index 2a344ccd..817dd100 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -46,7 +46,7 @@ const array2DEquals: (a: string[][], b: string[][]) => boolean = ( }; // arrayRemoveDuplicates removes any duplicated elements in a string array. -const arrayRemoveDuplicates: (s: string) => string[] = (s: string) => { +const arrayRemoveDuplicates: (s: string[]) => string[] = (s: string[]) => { return _.uniq(s); }; From 8084b5a7fff970cfed1475bac7e36254d6316c7b Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 17:01:27 +0800 Subject: [PATCH 043/497] :fire: remove unuse files --- src/adapter.ts | 49 ------------------------------------ src/policy.ts | 67 -------------------------------------------------- src/watcher.ts | 25 ------------------- 3 files changed, 141 deletions(-) delete mode 100644 src/adapter.ts delete mode 100644 src/policy.ts delete mode 100644 src/watcher.ts diff --git a/src/adapter.ts b/src/adapter.ts deleted file mode 100644 index 0c467f46..00000000 --- a/src/adapter.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import { Model } from './model'; - -export interface IAdapter { - loadPolicy(model: Model): void; - - savePolicy(model: Model): void; - - addPolicy(sec: string, ptype: string, rule: string[]): void; - - removePolicy(sec: string, ptype: string, rule: string[]): void; - - removeFilteredPolicy( - sec: string, - ptype: string, - fieldIndex: number, - ...fieldValues: string[] - ): void; -} - -export class Adapter implements IAdapter { - public addPolicy(sec: string, ptype: string, rule: string[]): void {} - - public loadPolicy(model: Model): void {} - - public removeFilteredPolicy( - sec: string, - ptype: string, - fieldIndex: number, - ...fieldValues: string[] - ): void {} - - public removePolicy(sec: string, ptype: string, rule: string[]): void {} - - public savePolicy(model: Model): void {} -} diff --git a/src/policy.ts b/src/policy.ts deleted file mode 100644 index 93a22ba6..00000000 --- a/src/policy.ts +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2018 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import { RoleManager } from './rbac/roleManager'; - -export class Policy { - public model: { [index: string]: string } = {}; - - public buildRoleLinks(rm: RoleManager): void {} - - public printPolicy(): void {} - - public clearPolicy(): void {} - - public getPolicy(sec: string, ptype: string): string[][] { - return []; - } - - public getFilteredPolicy( - sec: string, - ptype: string, - fieldIndex: number, - ...fieldValues: string[] - ): string[][] { - return []; - } - - public hasPolicy(sec: string, ptype: string, rule: string[]): boolean { - return true; - } - - public addPolicy(sec: string, ptype: string, rule: string[]): boolean { - return true; - } - - public removePolicy(sec: string, ptype: string, rule: string[]): boolean { - return true; - } - - public removeFilteredPolicy( - sec: string, - ptype: string, - fieldIndex: number, - ...fieldValues: string[] - ): boolean { - return true; - } - - public getValuesForFieldInPolicy( - sec: string, - ptype: string, - fieldIndex: number - ): string[] { - return []; - } -} diff --git a/src/watcher.ts b/src/watcher.ts deleted file mode 100644 index f7ed8b15..00000000 --- a/src/watcher.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -export interface IWatcher { - setUpdateCallback(): void; - - update(): void; -} - -export class Watcher implements IWatcher { - public setUpdateCallback(): void {} - - public update(): void {} -} From 66c24b34c189ed39e357ffeeacc3f0947451b9f5 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 17:06:16 +0800 Subject: [PATCH 044/497] :stars: add logo png file --- casbin-logo.png | Bin 0 -> 204138 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 casbin-logo.png diff --git a/casbin-logo.png b/casbin-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7f33138dec15439abdbbdfccf8c6db2f7e6fca7f GIT binary patch literal 204138 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

}PHR8cVeJ|U?7B+-;i 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�@EOb0j?mu_1meuG=L-b)3N95_wSZWG@6(K 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 Y-Td5;J*>K|jj{-(YpPe%E~Ebbf1-b%I{*Lx literal 0 HcmV?d00001 From e8a96c348006d1d009be8672f9b938082b09f489 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 19:34:37 +0800 Subject: [PATCH 045/497] :art: add static method for functionMap --- src/model/functionMap.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index ee3644ab..ddd77050 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -25,6 +25,18 @@ export class FunctionMap { this.functions = new Map(); } + // loadFunctionMap loads an initial function map. + public static loadFunctionMap(): Map { + const fm = new FunctionMap(); + + fm.addFunction('keyMatch', util.keyMatchFunc); + fm.addFunction('keyMatch2', util.keyMatch2Func); + fm.addFunction('regexMatch', util.regexMatchFunc); + fm.addFunction('ipMatch', util.IPMatchFunc); + + return fm.getFunctions(); + } + // addFunction adds an expression function. public addFunction(name: string, func: any): void { if (!this.functions.get(name)) { @@ -37,15 +49,3 @@ export class FunctionMap { return this.functions; } } - -// LoadFunctionMap loads an initial function map. -export function LoadFunctionMap(): Map { - const fm = new FunctionMap(); - - fm.addFunction('keyMatch', util.keyMatchFunc); - fm.addFunction('keyMatch2', util.keyMatch2Func); - fm.addFunction('regexMatch', util.regexMatchFunc); - fm.addFunction('ipMatch', util.IPMatchFunc); - - return fm.getFunctions(); -} From 3bbda321c44a9dc0af2bb4ccc129108a6a72e980 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 19:35:09 +0800 Subject: [PATCH 046/497] :sparkles: add main enforcer ts file --- src/enforcer.ts | 422 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 399 insertions(+), 23 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 197bdc6c..c87e5b36 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -1,55 +1,137 @@ // Copyright 2018 The Casbin Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. +// you may not use this file except in compliance with the Licensthis. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apachthis.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and -// limitations under the License. +// limitations under the Licensthis. -import { Model } from './model'; -import { FunctionMap } from './model'; -import { Effector } from './effect'; -import { Adapter, IAdapter } from './adapter'; -import { IWatcher, Watcher } from './watcher'; -import { RoleManager } from './rbac'; -import { DefaultEffector } from './effect'; -import { DefaultRoleManager } from './rbac'; +import * as util from './util'; +import { Model, FunctionMap } from './model'; +import { Effector, DefaultEffector } from './effect'; +import { IAdapter, Adapter, FilteredAdapter } from './persist'; +import { IWatcher, Watcher } from './persist'; +import { RoleManager, DefaultRoleManager } from './rbac'; +// Enforcer is the main interface for authorization enforcement and policy management. export class Enforcer { - protected modelPath: string; public model: Model; - protected fm: FunctionMap; - private eft: Effector; + private modelPath: string; + private fm: Map; + public eft: Effector; - protected adapter: IAdapter; - protected watcher: IWatcher; - private rm: RoleManager; + private adapter: IAdapter; + private watcher: IWatcher; + public rm: RoleManager; - private enabled: boolean; - protected autoSave: boolean; - protected autoBuildRoleLinks: boolean; + public enabled: boolean; + private autoSave: boolean; + private autoBuildRoleLinks: boolean; + /** + * constructor is the constructor for Enforcer. + */ constructor() { this.modelPath = ''; this.model = new Model(); - this.fm = new FunctionMap(); + this.fm = new Map(); this.eft = new DefaultEffector(); + this.adapter = new Adapter(); this.watcher = new Watcher(); this.rm = new DefaultRoleManager(0); + this.enabled = false; this.autoSave = false; this.autoBuildRoleLinks = false; } - public newModel(): Model { - return new Model(); + // NewEnforcer creates an enforcer via file or DB. + // File: + // e := casbin.NewEnforcer("path/to/basic_model.conf", "path/to/basic_policy.csv") + // MySQL DB: + // a := mysqladapter.NewDBAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/") + // e := casbin.NewEnforcer("path/to/basic_model.conf", a) + public static newEnforcer(...params: any[]): Enforcer { + const e = new Enforcer(); + e.rm = new DefaultRoleManager(10); + e.eft = new DefaultEffector(); + + let parsedParamLen = 0; + if (params.length >= 1) { + const enableLog = params[params.length - 1]; + e.enableLog(enableLog); + parsedParamLen++; + } + + if (params.length - parsedParamLen === 2) { + switch (typeof params[0]) { + case 'string': + switch (typeof params[1]) { + case 'string': + e.initWithFile(params[0].toString(), params[1].toString()); + default: + e.initWithAdapter(params[0].toString(), params[1]); + } + default: + switch (typeof params[1]) { + case 'string': + throw new Error('Invalid parameters for enforcer.'); + default: + e.initWithModelAndAdapter(params[0], params[1]); + } + } + } else if (params.length - parsedParamLen === 1) { + switch (typeof params[0]) { + case 'string': + e.initWithFile(params[0].toString, ''); + default: + e.initWithModelAndAdapter(params[0], null); + } + } else if (params.length === parsedParamLen) { + e.initWithFile('', ''); + } else { + throw new Error('Invalid parameters for enforcer.'); + } + + return e; + } + + // initWithFile initializes an enforcer with a model file and a policy file. + public initWithFile(modelPath: string, policyPath: string): void { + const a = Adapter.NewAdapter(policyPath); + this.initWithAdapter(modelPath, a); + } + + // initWithAdapter initializes an enforcer with a database adapter. + public initWithAdapter(modelPath: string, adapter: Adapter): void { + const m = this.newModel(modelPath, ''); + this.initWithModelAndAdapter(m, adapter); + + this.modelPath = modelPath; + } + + // initWithModelAndAdapter initializes an enforcer with a model and a database adapter. + public initWithModelAndAdapter(m: Model, adapter: Adapter): void { + this.adapter = adapter; + this.watcher = null; + + this.model = m; + this.model.printModel(); + this.fm = FunctionMap.loadFunctionMap(); + + this.initialize(); + + if (!this.adapter) { + // error intentionally ignored + this.loadPolicy(); + } } private initialize(): void { @@ -57,4 +139,298 @@ export class Enforcer { this.autoSave = true; this.autoBuildRoleLinks = true; } + + public newModel(...text: string[]): Model { + const m = new Model(); + + if (text.length === 2) { + if (text[0] !== '') { + m.loadModel(text[0]); + } + } else if (text.length === 1) { + m.loadModelFromText(text[0]); + } else if (text.length !== 0) { + throw new Error('Invalid parameters for model.'); + } + + return m; + } + + // loadModel reloads the model from the model CONF file. + // Because the policy is attached to a model, + // so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). + public loadModel(): void { + this.model = this.newModel(); + this.model.loadModel(this.modelPath); + this.model.printModel(); + this.fm = FunctionMap.loadFunctionMap(); + } + + // getModel gets the current model. + public getModel(): Model { + return this.model; + } + + // setModel sets the current model. + public setModel(m: Model): void { + this.model = m; + this.fm = FunctionMap.loadFunctionMap(); + } + + // getAdapter gets the current adapter. + public getAdapter(): Adapter { + return this.adapter; + } + + // setAdapter sets the current adapter. + public setAdapter(adapter: Adapter): void { + this.adapter = adapter; + } + + // setWatcher sets the current watcher. + public setWatcher(watcher: Watcher): void { + this.watcher = watcher; + // error intentionally ignored + const func = (): void => { + this.loadPolicy(); + }; + watcher.SetUpdateCallback(func); + } + + // setRoleManager sets the current role manager. + public setRoleManager(rm: RoleManager): void { + this.rm = rm; + } + + // setEffector sets the current effector. + public setEffector(eft: Effector): void { + this.eft = eft; + } + + // clearPolicy clears all policy. + public clearPolicy(): void { + this.model.clearPolicy(); + } + + // loadPolicy reloads the policy from file/database. + public loadPolicy(): boolean { + this.model.clearPolicy(); + if (!this.adapter.loadPolicy(this.model)) { + return false; + } + + this.model.printPolicy(); + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + return true; + } + + // loadFilteredPolicy reloads a filtered policy from file/database. + public loadFilteredPolicy(filter: any): boolean { + this.model.clearPolicy(); + + let filteredAdapter = new FilteredAdapter(); + + // Attempt to cast the Adapter as a FilteredAdapter + if (FilteredAdapter instanceof this.adapter) { + filteredAdapter = this.adapter; + } else { + throw new Error('filtered policies are not supported by this adapter'); + } + if (filteredAdapter.loadFilteredPolicy(this.model, filter)) { + return false; + } + + this.model.printPolicy(); + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + return true; + } + + // isFiltered returns true if the loaded policy has been filtered. + public isFiltered(): boolean { + if (!(FilteredAdapter instanceof this.adapter)) { + return false; + } + return this.adapter.isFiltered(); + } + + // savePolicy saves the current policy (usually after changed with Casbin API) back to file/databasthis. + public savePolicy(): boolean { + if (this.isFiltered()) { + throw new Error('cannot save a filtered policy'); + } + if (!this.adapter.savePolicy(this.model)) { + return false; + } + if (!this.watcher) { + return this.watcher.update(); + } + return true; + } + + // enableEnforce changes the enforcing state of Casbin, when Casbin is disabled, + // all access will be allowed by the Enforce() function. + public enableEnforce(enable: boolean): void { + this.enabled = enable; + } + + // enableLog changes whether to print Casbin log to the standard output. + public enableLog(enable: boolean): void { + // util.enableLog = enable; + } + + // enableAutoSave controls whether to save a policy rule automatically to + // the adapter when it is added or removed. + public enableAutoSave(autoSave: boolean): void { + this.autoSave = autoSave; + } + + // enableAutoBuildRoleLinks controls whether to rebuild the + // role inheritance relations when a role is added or deleted. + public enableAutoBuildRoleLinks(autoBuildRoleLinks: boolean): void { + this.autoBuildRoleLinks = autoBuildRoleLinks; + } + + // buildRoleLinks manually rebuild the role inheritance relations. + public buildRoleLinks() { + // error intentionally ignored + this.rm.clear(); + this.model.buildRoleLinks(this.rm); + } + + // Enforce decides whether a "subject" can access a "object" with the + // operation "action", input parameters are usually: (sub, obj, act). + public enforce(...rvals: any[]): boolean { + if (!this.enabled) { + return true; + } + return false; + + // functions := make(map[string]govaluatthis.ExpressionFunction) + // for key, function := range this.fm { + // functions[key] = function + // } + // if _, ok := this.model['g']; ok { + // for key, ast := range this.model['g'] { + // rm := ast.RM + // functions[key] = util.GenerateGFunction(rm) + // } + // } + + // expString := this.model['m']['m'].Value + // expression, _ := govaluatthis.NewEvaluableExpressionWithFunctions(expString, functions) + + // var policyEffects []effect.Effect + // var matcherResults []float64 + // if policyLen := len(this.model['p']['p'].Policy); policyLen != 0 { + // policyEffects = make([]effect.Effect, policyLen) + // matcherResults = make([]float64, policyLen) + + // for i, pvals := range this.model['p']['p'].Policy { + // // util.LogPrint('Policy Rule: ', pvals) + + // parameters := make(map[string]interface{}, 8) + // for j, token := range this.model['r']['r'].Tokens { + // parameters[token] = rvals[j] + // } + // for j, token := range this.model['p']['p'].Tokens { + // parameters[token] = pvals[j] + // } + + // result, err := expression.Evaluate(parameters) + // // util.LogPrint('Result: ', result) + + // if err != nil { + // policyEffects[i] = effect.Indeterminate + // panic(err) + // } + + // switch result.(type) { + // case bool: + // if !result.(bool) { + // policyEffects[i] = effect.Indeterminate + // continue + // } + // case float64: + // if result.(float64) == 0 { + // policyEffects[i] = effect.Indeterminate + // continue + // } else { + // matcherResults[i] = result.(float64) + // } + // default: + // panic(errors.New('matcher result should be bool, int or float')) + // } + + // if eft, ok := parameters['p_eft']; ok { + // if eft == 'allow' { + // policyEffects[i] = effect.Allow + // } else if eft == 'deny' { + // policyEffects[i] = effect.Deny + // } else { + // policyEffects[i] = effect.Indeterminate + // } + // } else { + // policyEffects[i] = effect.Allow + // } + + // if this.model['e']['e'].Value == 'priority(p_eft) || deny' { + // break + // } + + // } + // } else { + // policyEffects = make([]effect.Effect, 1) + // matcherResults = make([]float64, 1) + + // parameters := make(map[string]interface{}, 8) + // for j, token := range this.model['r']['r'].Tokens { + // parameters[token] = rvals[j] + // } + // for _, token := range this.model['p']['p'].Tokens { + // parameters[token] = '' + // } + + // result, err := expression.Evaluate(parameters) + // // util.LogPrint("Result: ", result) + + // if err != nil { + // policyEffects[0] = effect.Indeterminate + // panic(err) + // } + + // if result.(bool) { + // policyEffects[0] = effect.Allow + // } else { + // policyEffects[0] = effect.Indeterminate + // } + // } + + // // util.LogPrint("Rule Results: ", policyEffects) + + // result, err := this.eft.MergeEffects(this.model['e']['e'].Value, policyEffects, matcherResults) + // if err != nil { + // panic(err) + // } + + // // only generate the request --> result string if the message + // // is going to be logged. + // if util.EnableLog { + // reqStr := 'Request: ' + // for i, rval := range rvals { + // if i != len(rvals)-1 { + // reqStr += fmt.Sprintf('%v, ', rval) + // } else { + // reqStr += fmt.Sprintf('%v', rval) + // } + // } + // reqStr += fmt.Sprintf(' ---> %t', result) + // util.LogPrint(reqStr) + // } + + // return result + } } From fb0e7b575defca4dba23f92ccb0f3d4c85cff120 Mon Sep 17 00:00:00 2001 From: nodece Date: Fri, 27 Jul 2018 20:52:16 +0800 Subject: [PATCH 047/497] :wheelchair: Change the model variable modifier --- src/model/model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/model.ts b/src/model/model.ts index 252930a8..65ea7131 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -29,7 +29,7 @@ const sectionNameMap: { [index: string]: string } = { export class Model { // Model represents the whole access control model. // Mest-map is the collection of assertions, can be "r", "p", "g", "e", "m". - private model: Map>; + public model: Map>; /** * constructor is the constructor for Model. From 24b4f080270ef2594dcc473c2660935f1a7f5015 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 27 Jul 2018 22:10:32 +0800 Subject: [PATCH 048/497] :pencil2: Fix typo in header. --- src/enforcer.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index c87e5b36..23a8aad0 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -1,16 +1,16 @@ // Copyright 2018 The Casbin Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the Licensthis. +// you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apachthis.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and -// limitations under the Licensthis. +// limitations under the License. import * as util from './util'; import { Model, FunctionMap } from './model'; From 9fa785f39ff63d7b60d85b3825f00cab02e3aba8 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 27 Jul 2018 22:11:55 +0800 Subject: [PATCH 049/497] :pencil: Use Java's README as a template. --- README.md | 213 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 212 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eed6371a..a4a4f67f 100644 --- a/README.md +++ b/README.md @@ -1 +1,212 @@ -# casbin.js \ No newline at end of file +node-casbin +==== + +[![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) +[![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) +[![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](http://www.patreon.com/yangluo) +[![Sourcegraph Badge](https://sourcegraph.com/github.com/casbin/casbin/-/badge.svg)](https://sourcegraph.com/github.com/casbin/casbin?badge) + +**News**: still worry about how to write the correct Node-Casbin policy? ``Casbin online editor`` is coming to help! Try it at: http://casbin.org/editor/ + +![casbin Logo](casbin-logo.png) + +node-casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). This project is a Node.JS port of the original Golang [Casbin](https://github.com/casbin/casbin). + +## Table of contents + +- [Supported models](#supported-models) +- [How it works?](#how-it-works) +- [Features](#features) +- [Installation](#installation) +- [Documentation](#documentation) +- [Online editor](#online-editor) +- [Tutorials](#tutorials) +- [Get started](#get-started) +- [Policy management](#policy-management) +- [Policy persistence](#policy-persistence) +- [Role manager](#role-manager) +- [Examples](#examples) +- [Our adopters](#our-adopters) + +## Supported models + +1. [**ACL (Access Control List)**](https://en.wikipedia.org/wiki/Access_control_list) +2. **ACL with [superuser](https://en.wikipedia.org/wiki/Superuser)** +3. **ACL without users**: especially useful for systems that don't have authentication or user log-ins. +3. **ACL without resources**: some scenarios may target for a type of resources instead of an individual resource by using permissions like ``write-article``, ``read-log``. It doesn't control the access to a specific article or log. +4. **[RBAC (Role-Based Access Control)](https://en.wikipedia.org/wiki/Role-based_access_control)** +5. **RBAC with resource roles**: both users and resources can have roles (or groups) at the same time. +6. **RBAC with domains/tenants**: users can have different role sets for different domains/tenants. +7. **[ABAC (Attribute-Based Access Control)](https://en.wikipedia.org/wiki/Attribute-Based_Access_Control)**: syntax sugar like ``resource.Owner`` can be used to get the attribute for a resource. +8. **[RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer)**: supports paths like ``/res/*``, ``/res/:id`` and HTTP methods like ``GET``, ``POST``, ``PUT``, ``DELETE``. +9. **Deny-override**: both allow and deny authorizations are supported, deny overrides the allow. +10. **Priority**: the policy rules can be prioritized like firewall rules. + +## How it works? + +In node-casbin, an access control model is abstracted into a CONF file based on the **PERM metamodel (Policy, Effect, Request, Matchers)**. So switching or upgrading the authorization mechanism for a project is just as simple as modifying a configuration. You can customize your own access control model by combining the available models. For example, you can get RBAC roles and ABAC attributes together inside one model and share one set of policy rules. + +The most basic and simplest model in node-casbin is ACL. ACL's model CONF is: + +```ini +# Request definition +[request_definition] +r = sub, obj, act + +# Policy definition +[policy_definition] +p = sub, obj, act + +# Policy effect +[policy_effect] +e = some(where (p.eft == allow)) + +# Matchers +[matchers] +m = r.sub == p.sub && r.obj == p.obj && r.act == p.act +``` + +An example policy for ACL model is like: + +``` +p, alice, data1, read +p, bob, data2, write +``` + +It means: + +- alice can read data1 +- bob can write data2 + +## Features + +What node-casbin does: + +1. enforce the policy in the classic ``{subject, object, action}`` form or a customized form as you defined, both allow and deny authorizations are supported. +2. handle the storage of the access control model and its policy. +3. manage the role-user mappings and role-role mappings (aka role hierarchy in RBAC). +4. support built-in superuser like ``root`` or ``administrator``. A superuser can do anything without explict permissions. +5. multiple built-in operators to support the rule matching. For example, ``keyMatch`` can map a resource key ``/foo/bar`` to the pattern ``/foo*``. + +What node-casbin does NOT do: + +1. authentication (aka verify ``username`` and ``password`` when a user logs in) +2. manage the list of users or roles. I believe it's more convenient for the project itself to manage these entities. Users usually have their passwords, and node-casbin is not designed as a password container. However, node-casbin stores the user-role mapping for the RBAC scenario. + +## Installation + +For Maven: + +TBD + +## Documentation + +For documentation, please see: [Our Wiki](https://github.com/casbin/casbin/wiki) + +## Online editor + +You can also use the online editor (http://casbin.org/editor/) to write your node-casbin model and policy in your web browser. It provides functionality such as ``syntax highlighting`` and ``code completion``, just like an IDE for a programming language. + +## Tutorials + +- [Basic Role-Based HTTP Authorization in Go with Casbin](https://zupzup.org/casbin-http-role-auth) (or [Chinese translation](https://studygolang.com/articles/12323)) +- [Using Casbin with Beego: 1. Get started and test (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78460385) +- [Using Casbin with Beego: 2. Policy storage (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78571240) +- [Using Casbin with Beego: 3. Policy query (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78992250) + +## Get started + +1. New a node-casbin enforcer with a model file and a policy file: + + ```java + Enforcer enforcer = new Enforcer("path/to/model.conf", "path/to/policy.csv"); + ``` + +Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#persistence) section for details. + +2. Add an enforcement hook into your code right before the access happens: + + ```java + String sub = "alice"; // the user that wants to access a resource. + String obj = "data1"; // the resource that is going to be accessed. + String act = "read"; // the operation that the user performs on the resource. + + if (enforcer.enforce(sub, obj, act) == true) { + // permit alice to read data1 + } else { + // deny the request, show an error + } + ``` + +3. Besides the static policy file, node-casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: + + ```java + Roles roles = enforcer.getRoles("alice"); + ``` + +See [Policy management APIs](#policy-management) for more usage. + +4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/src/test) package for more usage. + +## Policy management + +node-casbin provides two sets of APIs to manage permissions: + +- [Management API](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/main/ManagementEnforcer.java): the primitive API that provides full support for node-casbin policy management. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/ManagementAPIUnitTest.java) for examples. +- [RBAC API](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/main/Enforcer.java): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/RbacAPIUnitTest.java) for examples. + +We also provide a web-based UI for model management and policy management: + +![model editor](https://hsluoyz.github.io/casbin/ui_model_editor.png) + +![policy editor](https://hsluoyz.github.io/casbin/ui_policy_editor.png) + +## Policy persistence + +In node-casbin, the policy storage is implemented as an adapter (aka middleware for node-casbin). To keep light-weight, we don't put adapter code in the main library (except the default file adapter). A complete list of node-casbin adapters is provided as below. Any 3rd-party contribution on a new adapter is welcomed, please inform us and I will put it in this list:) + +Adapter | Type | Author | Description +----|------|----|---- +[File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | node-casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files + +For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence + +## Role manager + +The role manager is used to manage the RBAC role hierarchy (user-role mapping) in node-casbin. A role manager can retrieve the role data from node-casbin policy rules or external sources such as LDAP, Okta, Auth0, Azure AD, etc. We support different implementations of a role manager. To keep light-weight, we don't put role manager code in the main library (except the default role manager). A complete list of node-casbin role managers is provided as below. Any 3rd-party contribution on a new role manager is welcomed, please inform us and I will put it in this list:) + +Role manager | Author | Description +----|----|---- +[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/rbac/DefaultRoleManager.java) | node-casbin | Supports role hierarchy stored in node-casbin policy + +For developers: all role managers must implement the [RoleManager](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/rbac/RoleManager.java) interface. [Default Role Manager](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/rbac/DefaultRoleManager.java) can be used as a reference implementation. + +## Examples + +Model | Model file | Policy file +----|------|---- +ACL | [basic_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_model.conf) | [basic_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_policy.csv) +ACL with superuser | [basic_model_with_root.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_with_root_model.conf) | [basic_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_policy.csv) +ACL without users | [basic_model_without_users.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_users_model.conf) | [basic_policy_without_users.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_users_policy.csv) +ACL without resources | [basic_model_without_resources.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_resources_model.conf) | [basic_policy_without_resources.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_resources_policy.csv) +RBAC | [rbac_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_model.conf) | [rbac_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_policy.csv) +RBAC with resource roles | [rbac_model_with_resource_roles.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_resource_roles_model.conf) | [rbac_policy_with_resource_roles.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_resource_roles_policy.csv) +RBAC with domains/tenants | [rbac_model_with_domains.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_domains_model.conf) | [rbac_policy_with_domains.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_domains_policy.csv) +ABAC | [abac_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/abac_model.conf) | N/A +RESTful | [keymatch_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/keymatch_model.conf) | [keymatch_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/keymatch_policy.csv) +Deny-override | [rbac_model_with_deny.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_deny_model.conf) | [rbac_policy_with_deny.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_deny_policy.csv) +Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/priority_model.conf) | [priority_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/priority_policy.csv) + +## Our adopters + +## License + +This project is licensed under the [Apache 2.0 license](https://github.com/casbin/node-casbin/blob/master/LICENSE). + +## Contact + +If you have any issues or feature requests, please contact us. PR is welcomed. +- https://github.com/casbin/node-casbin/issues +- hsluoyz@gmail.com +- Tencent QQ group: [546057381](//shang.qq.com/wpa/qunwpa?idkey=8ac8b91fc97ace3d383d0035f7aa06f7d670fd8e8d4837347354a31c18fac885) \ No newline at end of file From 57d4b5208d1f8bb2f39a0805d67d3fcad3339501 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 22:41:23 +0800 Subject: [PATCH 050/497] :art: modify logo --- casbin-logo.png | Bin 204138 -> 165299 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/casbin-logo.png b/casbin-logo.png index 7f33138dec15439abdbbdfccf8c6db2f7e6fca7f..cee1df2873b625ce61332c7a7b8c02d0a1008120 100644 GIT binary patch literal 165299 zcmeFZ1yo$i^6-l#!8HVTcXxLSZXsA;W{}|S7J|FGI|&dpI3&13AXspBcl{>koE+ia zn|Ig$eQ&+>y_Z=`GTqfxz3bOqwR`uTJwZweQb_Q)@DLCXNHWsmDi9FReBa-&kHIw- zOyNx6|KO~pwd^1uu+YE1A&oP>fLkHbnu>`jDVbQ=TiKadSrf~Mi4j}dS{a#|gCHQB zr%N=A)t&}CyUX8U1Z_$P_kKwsZj#-9<82@42XgYsqwlK-37*ByezjxxDOge>6c>TG zocQ$zR2Vm}LJw`}Fw|i+kc56_tEp^Ikz15z;OQ^_* ziZfF&2>7Wn0;9UY$z$&3kMvff=z0AR`M4nV97b zmC_ft0#SSj!JXHLPm@Xec!7KgLBe}W1LCexhmlBW7m7Lm!-qhW!g9z-;4O{fpuVk9 z*vg8no#cl`EC_GW!Vls)t!X~@A2FYG`~zFL;4LMelSjg66Mg%g@ObJ!X6Uc-O_{|Ld<(CZk6f@k^xpJOyqITi!63pQ&?k} zV08bZn7r&alZjdUA-0c{+ng&i$?0tpV;B%4pfZso1Nv-ZR91O=*z!KdzJMr(m{N|; zz!rGw)bK6{4MZjkR`Mp5CceSaXNM>DMns1t#@$<#6YK;?QZ17# z=68aTu=x$IYfZxbu}zH92nx(v=*D&j#VDX{r&UU0!PI z$TX3{-sr-#iHwiDBS{YtgP5r_d*RSS5MWZN(S~dgyE=NN5TxaX7P^Iq%IrlTi0zr& z4>7r*=P)6njyt+Io`efNu9|Z{OlpCd?DJVB;7`g`+slFUhNLJI!MkGi=P_S^z;bTI z@_}u0ZYP1;OoSq|RfdJjH+Z&|gCF-IoMY0PVKRL70`kd-H-OtO!v>9@)}L=flq)?8 z#fn)N6(&T9qzcyK^V<*PJ8)Q^Lk_4u2V#@@NK>%};fsoQ2WquXh*OkDPYRopy$&J@ z%4w%r;vbQjAtgi=XqQ`pmWeV~Nns}~=`PR3!V#B@ky!z<2GCRXb^EQT*b-=o?NMy^ zsIEvH;Z8{il3mj%^~N%SWOYNGMIb;=)GE_y^z;Ph3jWr6FGq+?4ci~l%^!szW=u0$cX9~tumv-aIS%pFcV`aV8{?k~@=TCK>e#T^dDh`kEwD{>6b*fVB`vY+UVP)MBl@Tcxg{U%a zF`J|%~E3`ApGOD=P^9WGYRU}ki@5-whgF|+q(_$H~wjnfxzZ6bo=gIa=y zfz>@SG4tHKsl*D9#suq#1w&)Q>|fN3>IbT3?OXe&>8H$nraUX%)@0Z8)~43p4QTgY z(?6%De9>P~SXpaPWU>iLGOHV}_6sY7P)^p?HP|LP!tsEcqRKOc3JgnzHI?vFA$h-wAXXf9kx7feO;Md!D)1QDC%tH zGIZf{^Yw<%C*xJ#f=rG6S?^8(k0;MNTUT3X+jq8Zek7lfK4ZB=xo98Ft#z&L_Y%=d zGfe6iDkW+;tL4)4Vx`frGA8Sd(bQligfs+u1W!CYm&vB!lM9UQp$Jp4D0(qXSsCR) z=BBiz|5EqL@?~$8*eFMSNdCux4=Lr&oiP;$75m0t*j(7OjgkhFg|-Xt1_CZwz#4Sf?8p%DC@?DtJVP)p*Byx}EPQiLlP#ej?w_<*-`38hwN}f92T# zLTi$)E%YegUOEjC(mbGJRO40GQ1{gNtZloVc1JqTk)9RY+ua^mE_+GZ0Uo|@x zd>ZUc%Ww>Gbl6px^vEBttZ|H3Ob0mt)83aF@8>oV2)(@|=X zM{MKkJBn_$f5z~o>Qgx53Q2KOTupTyW365t+^iba9D2?_>dASvQwi(b#`MBWe2AGArMVtk?_=soDC=ro0ka(1J>r{(fQ<5LONM>#8$nIxwKn~zKBS53v&{^w?Qfa{D~T|(V1 zqPK!3ZiyEMgJg3##x3zTSLJStfVeJo#pmf`f(|aO@2MIKmOqwxZhKOCat>?XHFWOd zWqjiox{+ESvhXnVm}MeodaTdrl6U`l!tCP&!|mbi`TWyn9B1uAh5OmPbG?0SpL7*O`p+(;N z-tfimn?OLIywW6&&(y({;+#e%*uH`>i7IfQ`VJv3E& zVgEw@IWNGt7&I1;RrsGKRo-l9onh6Sc8~U zKz3FRwg8ZXBgoR8?B5-P^^c3he{b$j@qhFJ2>4Ue+QHWRH^4vu6UZE70q)ZdtjF?i zeXut*`fG6h;lg*xf9wwAZ2BM6zDs^r`)w-xK0^H9`Nu0}3o@{`vQ@LPG8g=Pmi={U z48Af3&nhlrYIy^Ispa?UWg32_hf05q_+R!w;s*90L9i}212Y!`E0-E8D=#ZIFB=;j zGdC|Y^WTj8-tvJBdGPE98rU2BH&*`9_MsgspsA6|e`V#bmjARNFV8DuX=iU>2>{86 z3xa)TG&KeCG6RfQ*bEGT3|t1x+zjjnKvo6=PF6Ms02>zo2x8{|aIvuc=Hx%s|HZVp z6~N*9OaPnyJ@kQA0I>N#Cl;>(D-VE^i--ktyas^p*+&rYeFB4k{7nC-{p+y))cixu^k0YbzeDi5{lBUI=RTZF zK$bt7{=b|0t<`@vVrOM!?_^*L5-|qPkpC_=f4BQj#fKg6Gkwq3=BED-427M6_C09r z{y8Up3tCYF=hI@wX-%iaQVCP z-=u%j1_F4EtZXd|>;+9N42(fc)|STnOn+7Wt>yQ#GcPzvf&`TEluqOS^wznLG|CXzAqwpf8(nP zUhjegIXO7kIQW?!RzK8GGIa)-zYsSCpXltqCv0w3u0NC>O8%{;)_>Ieo8%A8->25! z)~3Hr-QR1$D_`)Uo9WM0_rJ{QKTj0@J3sv8(*I7Y4{ZJFj99T7k}aUIiCm8 zU$`Cs`FZgduAlRHApM2w0g#^;f8qK$p9j)kxE=ucdGQynpYwSj{e|lRke?TS;rcnB z2hv}-9sv1y@fWV2^LZfsh3f&3pBI1O`Z=Em(qFh90Qq_G7p|Z4c_96T>j99T7k}aU zIiCm8U$`Cs`FZgduAlRHApM2w0g#^;f8qK$p9j)kxE=ucdGV*X;QxA#6=Vs1c-0B~ zl&af^3K94TS7Ly)iahvNbsQid>@p!BZe}4Me1Q-U)*BEIJK*PTnFS#rP$O4%lC~hA z1Ru+Yi>NtI@7%gX0;e1@;5^so&ePqT>2acP>dNAh)Z?nNpJjePCx%2P7gt`9#;pcM z8;yw#m`HLaTbh!aRo925;;<#j7*#A5f@aB*IKBZHw9Ld`=j2j$Ai+qZ3PV=!Yt^am zxf#*pEbi?$xeeXeWVktt8$DwUqE$0maQ7DmcC779%-edNrylcV7i0Sy{QmczE0w|L zkI&eYj)-l{zyCeo`LjvlB+H-G<$yn{4ZHqmiipAY!`lCG7J>+VIQ&2L;{RX^?cqNL z-v58-#s9$;{+hmR|3feSU$amSkbCtb4F7*OaEER3M!&g#Lp*ssb`s8@UBk~^Y2Z%B zEq(w&Dq8kUztQ%xcf<~hiLlO*|FJd$IKY>Eh1I@ld;;gIi`L28i})$24CeznxAXlg zH8=hg0wOELh@p$L<(Q6fjdvV;bIPgQ?HnDCwy67}Ek7!jX{WzTEMuHY)UU6#&v9El zDqpq27qHzy(Z4iqEeShi0D-re zLR?n%wPB$Wl6a7`jxbESi;{>sDvUMvI;xHHzV%X1F_L`)=)TkNeyMI0OONlUGjE>z zaL=!-{ShGQMt?WdRz~%PD z>t>Cp@uaUyzuvlc4()qV{4FXDrPfB)9SOkC3hpO(u5@Kwnx!~}3q8vX7=i|EsF(#o z6{4$)ki+2<_a99A;1dbBU38qgjlLo*Kkk@NcZ(`_* z%ZPRaj4S2NM2~2Pbu%X`5Gm8g;_c#}6n$)>PaGa?%qz$J4(r*}wD6 znHO;TJje5=M>cYvYhL$7Ek|`s0;dx-=4m`nbvJuxU00!;DQW{bJvfQGrJU)MpYF51 zoTfYnoM6o^EpjQ`j_=9Gw<1&n5D{4wDeF#{p{YHhwHUO zoIffi9HT1FLC(E{?LZC`XV)ejU!VwxjAD`Ovl8wjP33pJ#A`V#^E|g|x^nAkHruZO zXZ_#O#&W=0p;JxIEi2D0DWc1F+UNF!FQ}P_JCKTN1N}LZ=mK$-k(~F@Y(*tlv1=7G7T0#RP<|RSHd}wc=A?HUr+>}Gbh|rRro&?__2!2cfV6|6GXA3uCeKxj z`+=-3Cl3}Qt`{4+B1efUp-)ZBF?y_dNv+9AVNA^7lyohc^N-M)NguIhD?o6NV$xEO zaug*ZTeL?pMS)H4N>KN&~ByB@w(?ti`Pj~ zn$R~wyOO*)ifnEF_mr~YJ;dQYj)5;13L||Ey>m%2g2Q1mMe?QaD&ItC?4WkV)JEav zLcO+z%yTK0X6vI`0OAah1Ew_An6~P?u9;e{CcO4F^=~lwWd96?a~!WlEBC{FkGrn) z+jmoslXe0?TlE1d%O0)9;q}Pk_$Kj!*0q!|l^Plwv>B$WIZOs}p5~18Q7|#cd$!c& zE`w+g>o5+eW`4x>H{?m7HaEK=^A{2KN80xtefmPLZ~6ZmE4MVJ+nE@lYgMnSx|WX~ zR_jVFdasnP3%zsv$fUXhtCvvU;_5t#t9Zn*9y?l(K`XTLGw^BG9R|H+ta zX^O~Yr$^{;UFcl#jK2yzGW06`plrH;PwuQ}sFwN)HOXU@G3~;@YDgbhfv0@5Xhhc+ z{UiJ8Ku^SVTf>8P=B?>`8tA88!-au%Ro@umnj!X~`Vx%6(XTdwYJ*XBRw z^#2IDLug>%r=W47Yc|FE7NL8;^}FDjY^FAJA9RXbY%deuNDfAjlk==*f~N*?TqY7C z!k4brLSeP2`rK~2EqGX-aF%@D%8U15?PFqOTS|VJ;q-lpN$Cc!ZG%;f70^UmgS5${ zp!)WBXZMhw^zW{q}*Mq)N(^xZp!a>ru38N2E+9} z=7#DXea0{hBb8TFm z&U&L7j`EOwq%R8@qaUGj)6uVgVUC1Hc#rp7;KW~uRGsBD-VouC++IgU&%oqe#^ZH~IANt@6xHWURY-ogtjo$4IIt~OYJsL65py%nB@v}=hIT04 zV`Km6)cWK=xKEMv77n?^bCv6^t;K!Os_}Lgus<2~=Yr#c?5I6r@1|YxzGvvJ=?T&N zaYr(!_;pkxg*`xlfk#30iX2aGf~<`&rPI;HgrkYF6$?!iw!L%lc{@p#RJw6{B%13m zWByd#DZ~>eq2BzUw9t=6-J1(Ng;KLa_DZ#!N?bMr$EH^XdvASgaT^~8fkRjTRaovT zlw6Ywvc5}Fo77x3yskAxZ7?^OqX(=cP*EP_jj8^_!n{*Y|WKp+7S3zk4dQ3aN?*1 z^C1L6$PA^Dqf3o4^G)VXre~J?hk+arsZPK+;geVogY4=kDWWUxfHT2?+;4$OncSjE zsmI)KZ}ZLjmvI+!$bu>~y zbEv>{)4mxWd%4_5tdjX@HfmCYcI;F*#Ar~-UoxU_n9=sCkIMur-BFwSPy_r6W|vlT z7vJWu!V>yhTmMW^O&22>*DFJwm+OLOPEG>chc6V%Mi4?yt~p8!p@Iksr{8AF?aEaw zSdT2?vXH@V87}ueQy$R{P8&I@#wH_yX@}ElY13MClef+Uz z#L-?4SCMW)}eP5*kvb;#``sMLu-Q+(`E<9U0% zB)iy{sxiXC^@Y*`dz)YC7&aMo(FvXGm2QyMaxi5m=QdsLB}X~s>r4}n`3Z`h$vKs? z$vGgjJV}s65fCC%ela!QD-c#$W8S!N#sCg4Sf$jZw8ub!4ADQ} zwJHG>TJHHvK>+#6PTjlF@++M+cdk*9nV`8w7WpokcS8SoknwSo?iCLwJ_7tDa zgBTY&$hfQety!oF#H@9@WjkjjpD}iXv>fm2U3J_a2zec6OpciUn2{zIFiu;HfhVa%pL z?zRtoQ3H3&g1qAr-PAw`T+fGo4rJ@GL5f(=tl$wViJF;KBlr@SsGbfrGe&A(Fw2Xy zNC^p5vBmPG1+(h0j22cNl;)^$(zcu?x91*%p3o6#)9WC^ihNs55~JGu+<~YpXy|}^ zD(PHFb~r+E_Eqlz1T2!`wz_PZRWs!diuTikDr(@H&+@h>19tNlr(U<$_os9%c3XIk zKsvR0RcZWj`~_J%yyi1uc_363FA#C2v-RBmO8?-;2>GKL)lw&Ad5L+35} z=b3GF7UnE%s;qG6nHdV9HaucmzMlHHYf3nGOv5Q}(K4i==;O(z+Kmz|2tEp~ExJax zJxql(p~0SzGUaN^!nnvvbEuqr7tn z;}3iQ^z+_l+KqR+s`pFtca>##ad!JUl~aE%PCcES7m6(SJg*cz?)C+ar+mFwhAG}M ziqO6ea*BPVZ2H*qHS)#N9h7W$QTVw$sGxT2gVNT;AP?)T0q63d9z%>Lj)I>so(L** zVw1dy$xf2DYY9yIK)NGYAsZD;?Ga0u5I=Ny#5cs&;-0>ZFj2V0SQ75dR0L>oX(~mF zWIqlfcNs8k=Q{7F?jc}A56YH5d(B*1g_h=xfRoM%@PzK0XzQ52jbOT;^*R>19Tcj_ znfoJtI_r&=?_}5n?+|RlQuiuSUVpQH1=N6MO_7wqwdeac^pGJE2uC;TTAbc%9 zaY&|*p!eN>qvjlj3WHUU^m^B5yE9-);2QQD=U$$*#mi`41a6sUBen?=#zZAEL2VpS zB23Ye#V?llg~^phM+NOdj#FE#L*y)_@E~bmgEi&1x#&$1 zgiYGRNvGdTiUusPdegqiiF`AR!Mh7L*ywatJ%3Z3;JJu*zqe5~rS*NA>HBpqVD>Oi z==db#x+lZ!?7kX&dGM+wy+Ggb6R7ZM`+|)gY&qfCr^bv)89QS`+8$D|>Q}G$iP2SK zTHYxY(a;9G(>70?8d`oL)RjI(Wx@hI62%ipLaH#LM8eob5ofKBnvx_+=OJgBYcduX zSP+hecCaKP;X{#7-{rj9&Bf!fh*WPt*b}$#xJ~?t7OMz5X?AVr-pj|~u)b255=+=7 zkg)3&a^c1ku6%JTA?R=+@ejg?#{7TsS(k=ycYxi^_>U)Xiy*@6$Q1Eh(6M!kIo zX2KfESBK1HN*f0}sZV`FMAuj?XH1^!_l{R#b##vY;F0+)sB8C~moT0XUL0k(+$0cQ zpM+e1vC|N4rG`z`eROQA;thzxrP0}ngI~ASDI2h%BHrD-yulWk`QS$xT8c&! zQXPGNNS9HK7S`4;_qH>TcmpY1&pk+U&OOR+)vP@`*HQPtfz6$rh9V$SB?sMlD=Lv> z3++@KP0f&14wZttqbNG&Idx+|ed(c~lzJeGSnjL$;LCQ*4|I4RjfTdWA8CuIL!^W9m2e44 z@5ulej)}iXxGb@3k1WH~G<{ztq(tkiFijHSx1n()#Sa#3%R5si@o!C} zy#_yK?ps>#eW4i~%2+u1EHkLbBe`iwTsjY22DeXcST>|JJKh?-AS(bb&Ev%3#Di)# z;5?{c{kZ%7u=+kl>_i<8;xl9S{VlY_ubdS^e@Nv)35RpJog>!tk}RiQQzzdG9uM0{n$Aj$Ms-i=`}Q+k0(PK zU01$E&JzPe7UGpBD8})u>(LGc)Z&$UPww6=7_!QsV&bEc-^#0J6~9jHQ}I`Xp&-wJ zhVw=*PW~LB32t? z9s}vK!ryd@z+ZPB^IYBvI~e~lsnM9n^L?gWTPs**GJv~3pgf?@L{VmWbIHGBm-@)hTS16=E|F{qIeX%_nn2r?^`3Y(D9fWEk5&FH!} zJ>_t{j5D=^brbsBXJz`AYa?D)Tl+*_J#+Lw?oW7;*AUJOUj=1ceetSZUbrwu5vbYk zD}k#O^rCr`75lCN@*`O=YR96gwgPzD>M((9aEKO4C9C`iY?5>Kn-H8>9vqD4R+F9S zX(+6-Nud3H-{()+3MCBz&csU-`JAEqQU{Tb18C9m^0SBhE@O0b`P-7@y6UVq@i7yI z&7-K1Z3w9Y%S}R2Ta}kr9+PqfhGwm7MwGE;TXQv;DvxGrqEYyJt7dg~9!%%&7Q9H_ z*B3gSTTM`GcDvkex!rELcVZ&Yhds;3`D1*X_0NQw?HngQB@KCQQe|AGRPq@S;ms@c z*FI0uPtQRVIMN7zT?-({a#qoBK8bbu=I{v=MAQncrCpz&s?$y6jgv$<<3khto|B z&$(rBPXu1)`|>xg(>PiPwgSz_US6tQ#L66B%g0M&s#^~tfyR4{G5DOA9BJ8kpGL&6 zi&3%1xQm9aF!HpfCGmZZIv%pS+To+0(2R8F8CbO;RFB|%w!Ene+xC9$I)uPF8UsMy zj-J8(ltqJBHXSn-7w*|ZY_#EX{oyQDan}pU}NaiFls5GSw5qm8LmtI4!qiDut}m4 zS2_)(8-_@lD{{6jbdH98LFNcc92|%WxT0SY<`}?6vT&bi-D3!FHlOdB`gn;NDP}EG z(Qb5B*f{?pb%fF#?5o%qEgXgno6BQ49-RU8)d1^ir=Xnurq)GOuT~Wg_>2j0tk!B} zcu{MZQ)jH<7i6T)`+>^JU$wC%safEY&Z&J0IhJCv%~CbDVCSyYw#Ea?l_VOOx^+TA z-=wl!>4HqNcpX-6Zus__?M~iFh2!71`5}De+i$Yj3vTNB!|@kS_;2%`2vu+U=w{3@ z3seKli|1T7qCE7IXDbY(7zAF+8&bXwDi+43Dhfk)ppX^<>B6WTj|F7$WG`^cEwU+% z<=N(E@g!&ZBc=Td~Net zg_YrYDYouP6w~Y*h*-2~!gR0ec{_tWhx${@(m`Fx5PBLiw1af|V>R`T1;Y2m&il$p zAH4|8WC@i6g0)=~)dNe#$w`Y%2NmrDol{*KSGZXl?SO-oRs17Dc3U@Q1#^7ov$j3D zn@p$c3IsyOB?&E8oga5S!1pe{-%RWj=-w0KqtuS+-EXJ{>VuxE08OL|Q53VRB@pvjv*^o{@^a|MhVi{4V~a{F;q8O3 zHh^D&R=IVs2-!F;|4V(&gsTWU=w}@d;azF9x zJu{@Tz3=a->pC4|m~d3HktD@YKY_)h6?k)&sNL9GjhDcEHMgCb!3WiWl-(ey^|3ox z=B>0YRmdh#plL0gJ}08B_qwR)y(M=>5gPwieCt>Fpj2ddya1+lBw9*|qAIbdkKL7s zQj)rKO?jSPchgIodnyhB=L|wZLQaSMJ$CaR=ci^ZEM9d^RXU|*`rM8qvWq`Xvm%wt ziwef>jcj}ZY)t@H*VpTlFU(wDOPx*b?3~=mSK<*Rrtb7Ra)w$Au$|UIFe(MWXLY&^ z*;=sn|J+_M=gGJ-HBkyj~p@MP!*Vl>`lS{~!a}}El<0aaJJJ0QnD*5dzQnRTm6!d^@ozsA- z=|@^?n>|np#O=uyI~cIsRP8S?*q1!uk;M?-QUkR(5lhhuJok~?;f`a_Nm02z+Hr*P zZ8CP823@~@oFprfEt^3S1y~39DU`SADra=X^@3?X3)(lG?e0kY&*erqjkt&9GZN~EGXG!|lkRpT((`&hUEW1-<)eb|2X+*QXk z$a~JwC92n^EJ>VeVi@zT!qD8XS)W}{NU5iSQ%989YN{z52Ky%kQAOIU5A6p&2Czvz zB1a5;Y>1ve!UZJ~B^oHc_N>hM_2G7->)m;sD=0kM1bnARhO8De;Kps8i7gnC_#9(6 ze}|R53n;t;vM&XG>N2A z24>9O8 z3UYZly11B@)-RThO$4h3t4y4T4YR_Oe9G}rQQvfIm`I3^Un^d9_Bd3zFFamCArh=H z@A?4V94J?34kbdb;jcHy7a&O)#?CJ|PAhTbq(K(q<2&{q(s?&(sTgj7{jEr^$!^YV zUmN^R1|Zb zW2Mc7Fst>QU6B@j+K%*wnxZrEO>N%oEnK<*OBBli3G+Zbn*h zXfj&pn6OKDWIpW15|1zO90KceMcJRw*i?ASN|Jj};}k(rNAg(17)qC#DLg7p?J-A4 zDL7-@G`^gv6!J4Bm4uA=v@@?quNvI&|B9s#Na5lUMQrGpuiMgrN}s&c#vX+yBojOGyVk?2u^ z(nQoTts;>dqcenGLi0I3UViJg{=~7KkZlqwKNQKnzS8RwJJ>**2JlVz3KRpqf}X^O zc!Mg%npad|7514h{c|uLJRi=T4(*`a6zRUoT6a)a%xqQB!c6e2tGZ?^NTx7$&Nd7d zDCb^EOVkc9^!}ceG&awo;?NIDQPB(uWNns?HOwkzUpws4qpD=_&U>ML$+CZsU20MuWg+)42&?B^FdNv+j41NP{_dP1;wXvDS1x zXUy_CZC$I&ErVp~n4iggk*``~MPmGobjv*8y{giLM{II-cj1;Nd?|vWyuedf-&Y`t zKs>D}>|yM{;sJB4RmX(buWS;Y!;6=*Jx~&XD!FO4Ta?4vXndw01)-0|P})^`N#WXk zsBN@fHu55&4p2z3=P<_g7?MTo-*ZRoxx_1Qh76lJ?yF`Ue2ef4z6fl(r7CWK8IpAu*}*gv?TMVz?9+ zw*53vWsGCh?8`}-2llx`-DT6Q(ok0lk(9*zxuT3+V{TYf{*4;29aTI)U;A>k5p9|G zsf}-KH;vUP{79W^1vCYWH#55FCyYC^?Fu+GA z44b8|uCAr=)wXc^uB7zRRA0tDYP}?znpZ2`NgO83wTpC!XB~i;Mc=oYm$$k-yLU8m zWV?SA_U=}7qHHju*3;r{tOFo`5eEL&(DL14jFHi zwTC)sRBqd>$4YMgOt#lO=Y6Ti^uYN?M5mOac1e5JBL|na5}C-dv5bRpI=Z|)d{p{N z7n>hnz$4VY?_3onAWc4Pl?ZepdmVk9+$rK|HC8_G`l*#$Xz|?A%NkPnRP9466cTpQ ze6#|VXo*iKy;ABigvun~EiZHKby}G23hx;1#<_^#@)QaDw)Doh^>*f{ls$dqb^Kmi zG83t@$KsZ^HQQw%Z$Hi}0WUUxw)Cjg=23nuevmRsSqx0X%fu)3)M z!eMqrp8Um%0+_g{U-MxMDcsSiKEg`Orp=FS+Ysw2Nm)4$&R&KQo2KPAicxSRHQ+hX zJ3i(L7_kM<*7~3zM903sa!M7h>T6c|4qVvOHPhVt5YbS}mHm9tZaDB*5H80k=e4!zQyIpvK{vIALJhjBV~=Ppl6R`#ND%kE#8_CO zO<%e+&jWH6HP#o;5g%)^UcTeR0qr(fN3Igh=u1lE%ne{Vs+SIjs3?h@fWLlIMqv1r zR3qlL&$zw}{B@+;&iSh~E06VU$ESGUvw+*1CPl0H!*#E_uDb*=#X(PlqSB2nUXIbV z%$Ehk-x`3U@B={GfOnNfPNuI4>PeqjVrtB8M)6VeDA|)sw>Wfyw~1Gy5E}CFzNE!Z zAPxknYo7H2PxnZn#h6J4JF=u@ps45Uov?4-OE+#hAe!w3K*`#mC(mId&wjGE3y~M< ze>K6}=^gVd+hz2orNWF0_Nm5xaH)QI486NY?^2;u2ZzEaFCz2TucmVfsSvXG9O1Y` zkBSgBB3MSJI@ls^VXr?DeXfM;4hoC6jc$A**|kDm&epv%qi9GK3iINqIlxa=I^{7} z9fb+*jO;8dVRzz-goz$(jnE-d+1TOdTSY}$OGigCdak$HI*rcpuW$HAoP78RLUNI^ z$MkDh*QF$EM!v~!ICjm_jts}v@kq|hI5;Prf*mjeAPzi^&V9d}iN$9Ku zkutt3;)JezExB&(g|+XpCvlC+REnJ$S3OMC3yUJITB)sb8b=LNOajZ+*`xKxw=c-f zE343)1G<_!V^?hlj8gL_g{wm_KFL%}Cs1=wOPjDMo3Ay@yKL*g zM1$|=2(mUG6l7enc^xs`wF{-EjwgB6N)F>Y;E+b~#uiFe^yetRvT%w-NulYO9C47E zImTP+ZrFAic5#(znaN`BoeUFsTvWY#CUbjU!guF^#zmio$8SlS^x_*r4(hhLp|KJr zbN2?K{fF>I-0;w7zl5FDHwm!*u>BvQT4mZv1sJ#OrFX3tOoQ;*?s zqyU4`=v0pw>a$TEixQ)cBD0*UF1+N*xK-LgR5bXAzJcVMC(_D^jloX4Mgir3aZ)|L z%OV*=gRJ}|kvxHZ1VEOGwM|FQsJEVCbxVo0rVzCrUZ|@R1!FLl%x$uUrKn_08$VHp zw@7BzXQLTnwSLpJtQDVkolM(~kGp;NZBEIu`8CSEyl+by=h{+m ze{C2<-D%w9>}3|VCM}eP?zWX)t-ZeKIPm1o`s1xb&bey`M@k~a+ypEpOK!zkfAt8j zaWPw8QYDtc?a=+kgxA`xQ0+-FLC5z~;*&we8$V;OJL9_@yOyz}_#VA71jYj7HyA^* zL4B{Bmlx0lu=_V`D&8vDP*GqjFX`g1auB(n88BDhDAbKgD(i9#t={e{@N7&HG;)gQ z%GlqoxioML$w^u!*#<-m6`$LA1gB9t6QS|pk_jHSzsSM;(vl|^YsQ`b$|bmGTp>Sr zmcMZufIoAJy=!j1ah3lvVuu{zT?H|jozhab(}eFN91D9xZ5V}JTwYcDha1#kViwfG}gubbmYRwCA^N0StXvAmSRhO?r~N<2p@z zk}TG5Qr-E2n@HjIi`R7-Av(pkqv8TUhX$3u4!<+Yz}?;j63cq5_4 zAMSBN8Oa|5lksefu@0TNoQ@|Keaj3qt%*(@&J>>Hn^cH4)5v{rWL|A0J-3t{9e+0| zgYygr22uV=IaWq*1i6?RtcbM>(bv9<4?er25yyv8&HXzozEvQ6(stNEqzb%M=}dM~ zNB?_Av2C;3d0r;VXMAFZ&*-endn94t2mTjLXTcCxvTflY!QCB#JHg%E9fAjUZQK&v z>EPD5TNB(NxVsbF-3d-!&&+*4;Z*Ia+OpPnl4@mQDI_Q~9w%Mk#(t`3e~5v zIxQ9J{lsmeQwY#0&S3vVc=K7(=i9oh_b`H*yv#9@Q2ue6(k}8W)?pq$7C=iFdw}l{ zXySd|{U-W42V8;r=S~Qu5V{VF$a%8=b~qI%8&lbZ4=!Q2o|Q3&m#xV_+zx*TPjUTp z^Uj-i>EY2~-kZHia&d6Ep>0JM_)C=GIGkdiRLEAkL5%w^*(pUIam)LU7*gp-6_<+0 zP+HEy5oRDy>!sR5SQ}mkQc^aLs_?sflQQ{Nb9;0m0Y0HsglwFllA!WR!9Thh0_Bl& z09DkfR{L7c^k9L+Vv0PC?J`0Xh!<_=am9<@iIuPo9qS(p>bxcXA-FT}EV8dtsdTlw>s|o3sscqJAIgOG2pK zIo`BF_`V|gbOI5;{JkD9soPz8G`47h9efzeeMZiG8v=j18oS35A%>yT(vC}FT=(ZD zMm(~x>|b9EM88+IxP>zD*k|<=xNL!!zA#MhAx)#F_eyFc8joyA8uDt%a;SBxr}7yh zEW9Us--}Zh6Qfp^cHQ|=c9*IkFd*Z3xjHbutiuDmwD`LiaowQqG5qz5SrcV*QbwH# zr#EN(aHWS0DYHB^EwC}M5`fPK*cN6@yL7d@fWAf6Rik`rj71)cSP^Q?GRh)18=DVY z4Kyc8ZFK@l17~3Yk`batEbf__T#F;(>}7>i^=Io`%Bjlr=D*Dijrm6QD~B>Jb7UIP zH=Itrrq;P`PKTc=n^#H{gz3HP-bnUYWk!dM_!2gFEgj0^7bJefEO{M_zt_jTB?y7{N5LqT#0#!Rj%A57e{Dox14jDzB`o&v)^F85ex z(Es5m;Y5i&CW*E~>>>*nj+VTJ)qeeD?rGzbb?{h}n({;GGf`>v%abEP!#1Cg<@#Z^ zdCl#`4DXkVNr1-b>Z98*T{_zp^4#M0RJk;19xCAZjm{yo z0j*Zex}QQFT~{R)AUP#!wRYeiq5U+zv2DSEA|8~j{0VV>LyiO*jz*M9F;zmC&~$!GLl z{$@Mlyb@)oGz-J&y?l_iG|~oVqy~)eBun9wC39}gUaKI2&&2rY-?MrlhU4r zyDoGh)+fGha=5p;?NjQqnrtsH{f#>9oU>@n1IvD8mCFEICSiuL&; z=LY)kclP&T{~IRsZ`XhCOuijw5L=>a=fauVF;2)+u5#BKiP(t;upvC7pOzGoj{rKp z?It)-W5_pdd(dOb5*afkjMFGO>NY1*Ah952e>L+*MnCrnhW8R42{+^9p#L;)&^j_| z1it8O`{O!LB<@}`IE#7u{V}LLSJH?xNgjH-bjkxQ*FS?dz9Z7gs3`KWR%==&o1?xE z25Syfn*K~u_iMkkzT=Nd)TG1LhYJ{ooaHdNtnaFQ#Kf|KaZsqjh6$z2;LjRZ1WOJm z!@_~-W2D~#u2Kk+Q;Dq)7vIj->T<7%M~R2JM_K`;WfJ|(zZ8p50zjG_be3e6_dLm9 z{Zj6v&yJdRz^jd8_?yYUE=HA?d8G}6@LPs5q^TLJ>E|oAwNcfj#+|M+@#2tr@H(je zGH4>#(|Ectj2%=<1;7BR%fhRcAS`O-86D0n+CNGAn%#8NElIO zU`gU%a%$Zsh-cLu2pjJ%dPfwuKr{{Hw{eQ5r0F?1Il_-y?`$8s&6v#pNx@xm0xz~j zb?wowgD_6_LPXb4+?&J(h4I@en}|;rk*JGGbaA4B*7)nHq)`;g0ITx8)9^C(rBFDTCsUe1;xee>^a7q$mk{8@&??OEIx!_hV(X?HmZK6I@9po&k%etvoGY+d+i;wmu+NBc&Q>ubUE<`z$7y|LHWx0!#& z`eR@C$_NxvwmzsHpf+?M)4%fzExpth zaxoa=dCLw25g-xGu?a4XZ?`I6i98zOe56!MaU9OaXPv95aXB9rGz5K%f`1Sh1IGbB zC!7}zZcE8WLwOmD8~B5b@ha3A>2}`YCvZ;x6x!`>B zWsSYfV#~kDkW#XCl3yM&>9KLVbjjF)A89<+c^^6Vk%7`E-o!VH z7hQBpM{Rtxyh8A z6Z`i_(K>9u6E&Byt&{3E;S}{EHgJuiZ7h3Af_&a(+D{g zAVr?vdeX{LhW(acS6lnVYIb%4@Gc8SSIC0{mkU0oR;I6bn)=L8Ya~;i$pql>F2=CK zEhA3TFT-Z4?%R|kWI(FEkg(R6*g`0T3P1eZN;$$pG+<$a)feqi<1Hm9HNy9EU*2>4 z%&OKeqZ!ySxUIM;#kHe;V_4SEZ=F-7Fdx(-nW7+kUT3x@In-qbcuN`XpYN}#j)rJq zAGbo}OUVwydqQLe%I)Do;Hvy5TJZbhBT+&mY@si|$PV73&I`*9^37pGGPJc=zckw_Fni?WCktF&h*SWVML98xmZ_Z2{TI?!n4SA=Tz@ zg!jUR>e%Me)bMFdd_^NDC}H{3ipME#ErOjQQddhKAWHsz#7M%8#%X2^9V1q@?t%S% zUJS?j>A#e!qBkg-0}j5{4UMDMj{Em@@x;~P;oETo0&#xsK_8NycuH;^-JAEA|J2mZ zw-3e<1NsGcZi%x*Sm%j+$NBB~hGB8dj^H| zg!58LJ}587pm7Z1Vs)b&q5bw|oUJQDGz3LAoBZ`4FF^qA&$)NHqacsl>$qUY?L{T? zeT`-qaoHbrlih&K8f-IVQpyb_>sUX#5L!wV`qM6ni6#*9$l zR8oIs36{VX7?j2Ds6ks3@5lCISzX~H_k+xU*PjtISMcihGeDK9E6SbPIz85@f93ac(v&gFSTMndf>gcWJun5DpSDJP|H8}=;hi?`Yr^`|X$e1Pc_Vu`^v1GaBWEqv|Ot>c8`#5WB`@WHljg2wi zv$-6cV5%7N_1<3)7B$8;C{#>S$pEKm?Nm_WLE>}9*k76CuOfLU2Y4;PaaXO9wUX&} z?~Y$ri@rY-8dl{mu3N2lizUI`@oInjTqvge@$T3yyHIy?Z=%^`Pew@j z2cyS#cWO&V1yxpTWf(#4#JGoF`wq)#oHuJu#!c-<$4RVAsl$XeO#%^BBbIE~KQ6dt zv~6mKHPUyp2h2(Q4()MVsb0K9`sUEz=(GKi30VwpJIp91lqf&HQs#L>&n_p`kah4I z?#whgr#=;m$n2H;9n}qR{mGWnrNvz{z3Y(}z?u8?a=ad*zkE7(eq&rpRlztpjbxR; zbImA4KM7=}cb z5={bQ%={wVzn#wx1pB)Z0pBIwAaj3FOam&X%o5MyFMzdy!T1)Lh3%_(4~jAUd8me) zy%iiR0NL6b4*HpJ|KQ{wnWJAX2I!j+L*OcHT!9+}i~F%e2WbbCkeBa;du|UnY~)Wo zX<*RTS}#<``ySNE3(Q<;qxRrun6}A|zmy1M>eA+nt^n5H7_Cm4`0T)xVq(R!&3k%y zPf_uF>=C{mZYNiDos{J$dNAe+Q;i2TDz)1!J7AMkz&^GGS4$XT0LguMOl$4%PQ*9< zOQau6_OL9p-%*TXbx1_ed*j9i3r?h|Cj0D z9|;>CfSXw}?ia*`q4it_t3`<=+&VT~hqq9t)?&-!xHfsg0>8pno8(CRz_HES+s1kv zA18+6bU~%xiHWI=v6-BNS$0&r+&!AXG~|8QKL+Z0WX+cE0e;+ZIT(Gzf%T!Vp61kA z;FdPlJcT|4cMiP9&5e7g)_Wc9j=S^BB{D>^aG0PlU1^ZuCYTzzzMo@;sVWVWf(F^XPk!M+`(wz*V7$TPKPcz}WZVu26A zkiNb5?}Y#9zCRr$Zrrj&z5bCDACdy~vrLs>N3|_oD{itH>oy8m9J-ilIf7eH%nMLuO zxc`m?akl@>_>7`(%%P>>S(+-cXQY3g7`B0H>~~3W2?|UQ79`sBW?)$s`KLF*6z)Aaaj7mn7DyeTr%^o-| zLHbtjgII!AWINLv)+@=EVy;vR-&u6(EZb<+F$pbzl<`_f1ect`+107kRI5YCp#t}h z7DXA-e!QZ+k3+&WxsQ_ZAYVd#Zt#zyY8nh9(Ww3(HS84x=brkccbNPXhTTC9s7 z3YBtHlFU?W<5&%>8>i{ERXAgu;;xVpnn_WK1zkXJ-(k}sa8g6a5I z7ErTU9|5)7lRVq6@PNH;r>ImN^YCh;8inSg8^bdD3&u%u9I>aH?K?F7;p8mKVbl}W zBZAt7AI=vGJ}Z6|A+Hoa8J;Oh9ox zN_?38x!5RKK*M12s~)ghc(&#px$hg*dc$a4)7fW0*FAAx>{BO!SkaQML{=aJ3QgH4 z$=_;SaNzl$So{^^2mVKob-MmU2}-`m6phE=4L6xF)!U;S)jH>AOd%F6&2%1{eLYJ! z8cf6W*L@HDAw1y++l#6>Y}L=(P`%orykhX*g?okCNs z*=gPf3FM~Zal9EEACVeH@T^=1eoRn39Ih2(*4D4mu&nsRXrWY9M(Bx5Wd6O1wVcCQ z;nF;3n9L3Up03aF<)tWNNJ>`+Nco#5sB_YDqD+?N|7>X|;rJhLCDuc%yGbkIn}=2qxMIzp*ufJmujd&0MISmait-hT39ZT*6djt5uEpiFMJ%!sNWaTNU4Hh3`1HCo&9uXm#Bv9MIa^Dd}uJhJzCizXG39-KwW5~)Hp|5(&}<( zyU5;3Nm__uH<3fo=`&Ym3e>&8SzkgB8%(xCX2|axD@pb~iNBO|Q{53`NOhD$mO)}^ zd5O%VQtJ1%gV@KN|B!YdaXpB>6jr`a2&VGr4g>Bw5d0pzyF)`e_e+E%ap6Bc?ahDs zQAz%XI21!8w?_`Pf@)v-RQm=6TBDe@uw)F{nanQ-fAbY?C0(OdNd!&%2z#OM1S4(R zNJfihFf!8obGJ=Pd(BEfqn*MGUzxN9P@^AHcb_Sd*0o5Nc=mcGoluK?D<(ED00wD4 zo3ne$Afmeu97n#}YArf&Fo{Ous4+NJqnD+vX>^IblgU*^tS>a2sb1mwm2J9(f(M>V zM1b0gWc8LAcpea4{CVm&;#-!Y?j*qRozhZo8##9t?6mduaC+N(b<6L6xDE*fY`K^0FG zijvaWR}CKsZb@_e?vUMIZVfMucGmVaNd%wp6!)Puigq2Y$clUfH-CSSbOK2K!}0rP z^CMynaHA103E|SX3v9he5w-5|lA()~Hj~8W6Lk&{KVg_rk8vOb)m8#Ob9coZdIkg; zalS-Z@YQi&baS}j62sa_b5IjJMfoXi_2-vOn_5Rzon_9&qR$qw2TMs&1%9<%YeAnE zPZYCF{IbM1@D#@Defvrb5(dN;pmGb>>CEAfaZKa!V=FJ~*Vtq=*7~%FzGTAE%xw%S zyimK-bQiy)_4PGjN{#-EMCO&D7jK}z%klZ=Ez|_HfI&ImvVDA_J2@lLZO^6BDd|c# z0Sz$?Ya;>7h=>V2^?-??3F}GOW}6k|!|1;`J;5-xn^jUW#!I0WmIcKQP77z59SZ3X z`cH&W5xt^Fmlqr=*nHs#vZRn3s&yp=%j<`nzbrRvU_3g}Zd8+@y=vw?I ztsp0gmkkHBUQ&P>*J+YxC`>IHA6?|Ze1I%1X%U_oLu}(9h5X;`Dyi#isWT5(?KHtyYS4PA35tWgvzA>iv%D=0=N!5IXG1pDxEs#Y_WQ64 z;-!ka9$kqe$=l(-j?~)&{YDy&Pi@;7a{TYG=k)=W*IY}flbD@}_~q_D<8e3WU=ZSP zRb*0JV>LNPubB3lhMUAI~X24}Kf=J;kSE={_;-`J+6 z9=e=6F*3QU4F>8{9TN5IWuAeYCs9r>A+i6D2|;w)+e+)K#ngc`;x8Fjiy(Ct-Moj`}O-lyivIV5xUA#d6ScRS+w%*$N1hv~@ZwdOa7O-f`%!)^s7XW=0WV8@Aeu1N}coJryTw}y}^1%91bXUI+y}vWn+5D5b*dX zlIXBT!M%s9X+jorBBdnf0x9Ue3q$pkj8>` zzQ&HfU24rK(PbxT;pXM<;$SHt*7eQ^k}3+f_EB*1<8`q88)t{x9`xmrpitW>K&a&b zQ{bGTBNnsa`yhs?+Um$xu|t6c!PRjzqvKpai`rHv2EyL>)l+F;rc*$i7h6D#?xt_h z{yT|}AV!1ik2Zd8JF~e`THYv`|Ibw@3W(rR2iPY%TrudA=28%%cLKt7cIA#;z;RkR zsJp*?T$YBG(=R{hBLotRqf`Z{V~A?>fBVZupdezt){ zk*NetXP3e*iSc%+O}ZacbqQ@c9hDe)V0#dN?@*^d`RI+C^UxSeFcGe4Fue{*9TqZE zT0oL2cQr0M!mLp22;4aZWr>atk-g#g(UQwZM`gk_3b@*2zaLbCK4^K^Pz8#T?{YM- zInO2__@w$Skf5blaDC30y7{$e-RkWWgO7}s6)rd}rs$6Bk_lOwMO?7p*q>uzhu>{+6LW$`dzuazt7tea;&UP) zB>{RXcgDJ|<2DSFWyfOXQ0MtzO>&J?Cggo-6(hdUR;Ek0n_h!tX0dh%%j_D#y#L2; zv25m>1eIG$9BQ5G(q%eQ8F?m}O{B7pOqO`DDZM%OX&njcbhn7?LnE=_hHLz~0hxub zzo0aUB)8%UkB8)Ly!g)xqV~J{o?n^zI+F(peX8zizcOYW z6mV3p6t9{vH^>dv=3q=+qae_)Nh?u*Xe+7Bzy9JvRuDXvUqf>U?j9nR4b0U%1gf{& z<6sMGIb(oI6um%VX2dnw7IH4K0Ti^}7w>OGD8&m2Zjz1)e7YN|n9}9>Mg{CH_k)NB zn_a^OmtEs?z`)E1Pmw6EUGHNIvp9Pz(rP@NHWk<@8=rEwq=eyN({%Z)m1`phqD?e+ z{+2h)_}p(H_#4k~>O>K>jR|<{yVTO%@RcT;XSc=Bf?6; z8jU~NehmZ@aH5g=f)4+D%eZz3C%|i z-jp%-_S^CGmhlZE_+{>QF7u~w+OJC~ef~z&o4y{k~q+jHbJx&H(38f-2-3YA( zeoxc`-P1RIW_SU+Mq8!WK)4xK{q9fdPe zupvZc@XKbDmfFuaUu9xzmiD}4(=PkYPw3mOU-zY{h46mK2R{nWjhlgDF2%X=HUwQp0k)|bW{OA4OnJ5C8TvG(ykKDp+%#;$bkUfwOz zc`AAvgT*QZ-xZ60COI*wo)KFAZIT>cvi5%3)AhORmoJ(emWrCEPY^fOq`sFZ?tTb7 z1pnhB`X>PunEOoCD=s^hy%-KFfyu;yI*$e&zls=*LELUg7hfh{2D_vPFzV%NTic%A zP`$aD1lIfPIw6VXyj#f)7|aqd$kR5X@LO<2;w%bv13A7ER~dCEx6md(mWZ)zMaZBA zZ%uzVp_~k}_(Xvw+h5xs)e6Z#m%Umb4HecU#A>X~Q5TgTZDKDH@nZ9PlEtnI(F-^f z(zl!UFVV}UG9!;vuoo94h1;pM^)eiZc{F%T8uHX5#T~$d(O_0Ur$4Y2z;To(J<$VBW~V5BkPZt$lZJz^pZ~=wcR)(q#Z|3{P*bN6seX%iSyyH`Bi=3zQA_Y z-v@_0dY;clXIB0Xte#JOBz~8;2Tq`HoiH4lMpa@&OklJ#h!no*5sE${9BV|I(s^SE zg>bSNQo8-~#y^M_qAoTgoP0#sQ8Pq>vY?s94;}ZTM#B0?N4CJyP$xflBmYPAiW>d= ziGVoTk?-aXpZmPc7yjY0|51Fer1=SKuGWyGQ>`#N!CxR?crkrc23>Yp`z7~a?|Ap_ z8DN+rI&utQV;OvE_1TW{z$UOCh0~L<%03sI=8N7Z1y8WlHazkaun0J%8r8$E2z8Mb zg#h?%px901zac6A)o--Y{8c*3uKlI-!XmoP)r>9)U74MoXE0%o6z>K9NC#kZMyUbe z-`Syx6o5xC?BQ1RSkM~vWS5-#f&7ri?H@GhqI7zr{!x`9hMWm-C#r?(R2rHw^Wcyo zG?1b+Y$>*)>e@9^)&H4prTrdCUmz^BfI;@UPxSmXucp*vGfcN~>F^I!g7YZI!o4Xn z@t~&vI{@?0ZbRVBaYNwV@u0?pMgg^}xA9r3h7T$Mr60SH+L{ep;54-Y%|aTP-skk_ zwqJxKdu=d21IGV#gxqrUvZz8Mkm`XdB3Nv6i;J)*Vb@WZoHdxLU@sPew1OCoUnn4{ z^-bL6I}iS$%BL_j9R38kyofeNL}|CY?|jP+gm+&*YVgbhHc@GL{@X_T-9PHq^)r$5 z8`PncIrPex@kQwB12M8i6n{vPu(MYFPDAkkMJJo$(A8}cI7IlQbkCBDUBAT4D>n^o z4w=b1VTTq=G~veVn6+$t5<4J8zL(w*d8WL~dBa2A76N|^63AfZbG)%ao5$w144y>` z{Aunb3<_)}@?{{?rtib*LWl((8XEA8yFFk9i2y~ee4126rAX&o_uh_N%j_4X&L2K6 z&gjGeC6rZgKe}onvBGmxAqhS z13Y;D3)F9ApKTn-{f*mkK~9hA(CTKIV>!?$_#6#4Exxhm#DA`if~>v2F7-96WUk8L zm~kFROJ)*st{%Gm9WWNClX-vZKqL}(gE{)Z5;-x--R&9pF1#W9;0NNnjbPS^39Thz zLvtPRV4crL?A0Jl9Q<+SF_7SyQ@vzml#^gwW){a5%5gVcA#1;ue~-E$@FWzYXhiny z=UCH9MEdB^7vY+ciO6ETXRdVh#!2+FSPR%73)r}`tNba#(znD1Y~+2^m%OVmve$X9;GDeeyCFl`UW(#*eVu5l6>- z(C+yDgZImFb8FodPgkSd1_MGYrbJlT4oK24e2@=^d&i8*tpG9m-d{$6U=ld$55FKM zO0Um!?mG3<+Be?qngNe4G%9I8Zsq9!AI~Fh5ZN%78Wx;p#he0>YcO#-EfPn|B}LhC zloF1d|FnvA?M|Y50CHY5T~8kCwrY`4%?A`P@75s|OGWbK=IdkF^&AuIPzj8W|L+C& zpzxLHgDru6MlCC`-0ml6M?%{HzCNF)Tpg{XvNl5F_BNRcEnY zt$@PdN8M-SYq`#ALNL*ae+AB9EG8@%xyPuHDo@ZEiStd+Ma$jWyS{XDS<eGUv^C|9UUb4ESQqwvJS zL*t!$&F%p+AEc$|ekHY~-Z8%ZxH1_KaXJA?o!Kg%B)Z|H%xKCutFQ1_Hnlrm&;r^QYVKZjQ2vr)&U@O4|YO$?C2{gH!6~l{a8Ix7UXMjGUsbpg@>Gu);aU8u;*i$;$W z(TR}urKTMow_D(~03B=BuhYxGl=R#o;L<#i7(h#?zhP3Yf5zNVvH@)qUG%EIe%ihh zf|RK$fIqaXAeJTq{1AXH-dZDI_maXNIl5guc6M>S;LG(s12~XuPD*tl(n(Y04YhVF ziCw@&fZg0-#Eb=SIg^nd#{lY}Eees=w)QS>x=Jvxg05m=tak`p8147 zx>|yjj*>45Da#bmd3Bdbngd1>7UuPx@2z2*cg`*Hkk9!JIo9#+kZ&1VWUTta7EPag zxPmlk%{KiA@k3+JcR5Fr0{4Zh(IA34(}>el@zzp%xL}1itSIr3I-ZS2#74Ssk_i|m zW{p2>IMTVNoits4dI_79MSp=OfVK8>g$|j^A>sFx9<#IxJZ^|l^q7PWb^Xf@^jtKp zGll9lBRJ@nPq6J?LNdIp5O6Uhr#a$noe@-+s#PXS^=I5k9UWMppc=7pZ@2_fI zO@FQl7z$^y26~0totnK17|Rq^g=rmoW3YWa()KsBCyfL~iEFz1?{B#7@AxALKOv|H zM8E*1v(2%V^_(+hymSxQSl5$)~>4h>s?yE+Vv{*nj(FuGtHl5#c;5s4} z*}Stb$0>saQ7zi?yH3w#0u)Oh2bsEM7_5&~vn5Ad?onF!j)KBl8tN=U7#{K|&_-SE z4!+Y9>KM=-Mx1sOXFzFwsNSC0lFGVd!?cYr&Y{Mn`Z(EGwt$U9pRrqg`fZqa^9>JO z_zEL;`Igh&0y&sUQ@nC-nFm8afqbNmo*Rpo#-PVal{%i}TX0_-ExzbZY{D9~hlX?B zn%zZ>luHQUH+uJ(8ATcoa54}Cqltd|yZipP;f@g=-DGhZT|mK|tDbK|8GpXrr&aMr zW!5DOJaIsQ93bw#4B@(DyJ!X$`0vTueTiSQoEA%h40VIc23vtI^r?MG6@85 zVv~*ufEVAwAuU4dj%B5ya3KRWW9a6=Fz!!tkby^4qCLB!=V~z4mjmBRW;W7yo~5*@ z`W6?wP4HD95vU3YOBb;->*v;0$V?{ETq(~!{jXxZM4y?TuL8G5 z9mdsb!j@w){=g~%qVM(xs+2AdOIaf)ou3Q+yjAyfUhiwkqW%yRDVN4oYA%fT&h(jH z+*X6TjUyoNh>^v%URYyhftZ;&`*3`}ncwS)bkc|)&4@f5=L$Abw>U@%#PK9iL_4OlOyRP1u5lxF_9bQY7>b%ILtc0-4 zd@VJirTf*@(KqxBvReD#|LrN7my|3IM%H&JTm22q&ou~L<2Dh5XpkvO#6w_a>Tjvv zK+GTxu>Iu=seL+9(ZsDRsM4ez!lk#y&6hcPF=HxkDb$k%0Mp zX(Qw#z8yoV0*F|!WhO{tsN%R!QJ5*X56F-P@m4-v`E>yN6CoJ5gH}3G)hyc%rBAV_ zq~mLm)A9^P%_WCUU%oW6rn11fOl}(m*`#R(eKdtTvt1@cl!su z-v|wOt7x-nHi&m(NKPtHQ5AKlbPQzr2&$m|TRCl}O^d7f*Hsp)?AtTSAHYJb_E$)g zD)2OUUf=bZm~Q4sHoUsKacfL}5Gl!g=i|^-T|5uBn4ISIn>Vz5^ktG_RKVl&zxIGM zNFtbZ@m;Dd3*6NyJqU;ENDe=$mz{iHPMLp%+67UCe!txkp7#j5%}FE+T-&yjB|YGG zJ?6&i@=HM-@Fe?orRi{dM)!LB9`osg9|dV2^(XG zme;ROa?b%B+&>s^UHP$L-y)ge-(xNyfJM)eaFp!}u@bgFTk3VD{ttr!r1zZ14uP+} z68XX3LxsU%W|MFX*W@hnE8Y=)Wp-sE9@Xz!gwBo=Mt1gfN<8mk`1^311LQMRkjoyC8>RgL^fDJ;w9mDLOfn z`{+u0JK;T%@VR9Moi+hp3eGkzHlJor0LjjRS^_(iAo2LSmqH$88&X-zPw!yofCsPR zW1+Wq=$?CqTN=YuO{z$oJQlO+@|}neSeP0=u^s7_9 zuK~8OJ|lkkn>#xxoH$OwLu5|`z{_VGh#~<^R-Ey>W5uf3C|OLqN!TRmpK*kuM6QTP zVtrHxvdx~<>*{2o-a*vg-uL%udS|2&I_T9JGDB2*dNO4a=A!Es9u9y1fAq9AI(H?6 zh;i~=Q`tg-Ucn=@6>qhV&?J%A0SN20B0^SAMQL*q*ix2>0PMgkaaDv!A;# zglns~WQv51{GG>|m3()0)^E=oqmC>=WHREeZ_j3Y_L+jgfZEcnJ!#sa7otZZKbahi z&Qm9}4Fry`$KlQ-DJiV|G!>CxtSBnbZHwUf1Cr43~I1FA5R+1GR z8|e|_RE>Ek1SlcQvs*TRPFl;$G4Lz(uUwmghP~!)vS16tt8KeDJE3Ic*BElxMi|1sImP-(H+Q-3d$Kl{If#-qp!zaIH z4Aklt%e(Q0SIX9fd@iDg`J-2T5z18_<#`px1If4uUaA14B=Ok_pU?a&lmh`dnY{+M z(jiXP0jT}GA|q{AZ6b1~3|EV^i(7_t_R7>%tbJ@-lg;gV)|PBVaH{8A_4C3;@PoAG zERig8%I%Byxs&J?=T0V8Ll2T{QSCQON-PM;j%cNMAMuY9e}Ch<^y&&^MDCwne8Qmz zj=U>xq{MLD5FgJR{~2#MaE}-4@WbstN!Z$E{zFC9+PSQXLfey_81;^2@n;Db@7ex~ zx{4!u`g5jtiO-Io32ct|N?z>y|lcol= zvG-U%kC$D~3?#jKXCrK#7)DA~?d}1&`A7lTNT_@6ov_vmy{@+dTooh#G}Lnzr6!)+ z<(|^?Ve80G8GhcIhJzOSAT>A{xVjU@!!Fq-Kx50Jc=hIa7nOZm{_Hcq9)#vvk|tkB z)e@^*ZRCG(J+W4nyT3Qk?EUf>!|cvRwMM~4B1fTC>YsIMYhnN4@J8l`Oem2oMCIQ& z5Ut&~wqwTkY)VuAZx(XF4`-=L)x5-wdLEJ(K`-G#Shiz`DrIJrkdQD}V2lUyH+#*sUXJYZ|?8Uqg2$Ht(BXqO0EP=)F@Kj-@6C{e$D$J?m>bL$D7` z4y$+B^0wg`a9tIoqo93wRHzG)2wNKxYavbaRE$>f0X(gGgN`MxjD2xW#?_x1|CZ|y zlySJnR~N@JH$owKKGOGmdf{a@kre#qfgm^j#6!+luaf1~{SQFVSDdWh@C0W!BQAlV zU^j|(XIEdpeNIZ8IhO}dY%y-dbB*PN806%AO4-S-abo9gDPHDTqRXEGeICudQ%Kiw zFBT#DXsY$}Xxh18r2?f`e7TyPfu+CS73=XIU*}9Ln173H)2Zi{lKmgLzYz`Ts-iR4zGb#}-$-}j5jl7Mo+Mf|f z!LYxR%7&v&vPtGMv!nP%y$vDKLW=fBgn@VyK%Zf&5n9qmh!3RzS9(LnUiHkcqHQ2G z!$|098UUI6^?Ccjd^D%`nFE0`ugqilnvE4mDiZP>=Z&@xY|JU#JHFpS6;Cx@=s^Z5 zae$?b-PJhc`K}n89_WvKU;I2~xhw!*UDO7MF8wUbN1vXWAJ_5OIE8C7gxkrimr6o# zoDz=&B6$YmCtB&Tg6bHM>^DnrJR1DZ-z%X~Ont{_MoQ$*r1X^IPShd_$I z@_any&NbtFKoEy@Nqrn?Jv?8_p=*=#vTTo3W(b+tSu1m+;+E2)AdAA^1|$F3pp!6pcpb(utsQs(yPTri$xiNvjN&>(b5h0tx>B z=yEeEPqy~LZdK}8@6jhtYmnu#lT{CxKBx5h^wqsl`!=Ab!mJZ_1y5+wrzD!^12%DU zo&7G1!`Zmo-CfN10}y)`8cZ`!q~7qPNXTX1^1MMowba>ooARIZ=7EyKm&*P?U`+zW z_R40ZU|7I?(2D=(DI%HZ6{3I>l|)Vns8Z|$VY0VH60!~Mh(3TstO8k2^0&T7>wtBwYi+T zdD9Hydm3Yr8`L7F>nPwG0s8qP0rtwG6#+xJmM-1g{lt0$kn<+po|p52t^rdBW)2IU z-7*EL!8k#RMYLy#>`_S59J}L>(}cgtmy<~sNeP|WXkw7AofQD#VFPd1}Gh`@zd^yXm-F=AoPL1Vrh?t7xH7dNM8zyHt+ zmZ1N1eEsx;Qae|HsEHvitaGqY;!wmGtWDF%Elric>$*?)0iCF?;J|AZCv0o#H$ z>Vu0&G z5$_LC1ep2T&x@$6f!FNaPkWo{yn;3ipP< z9=yc2wxWSHgJ+o)Of!=0Fm?x?R`*l1G_e2hT&eM{;Gw+=vxsU7bMTa;bbedv(x?w0P( zfk8SIq(i#9r8{K+hwhS)5Rh)9J7?%_kdppJ-|PDWaOOU{*4k^I4e<`@*|pCzTNNV+ zOs3&Cw&<~{>X_XExJxsqiuhc1sz0$L`W!n&H;y6>ZQ;1mgVdIFtEdVhTz7AQhA+#Q zLDwT)dtkoW+3C>4rfJma+h_m$gyp^p%pulKsivdx9Q;j-Odqu#st4dxzOZ#4-ivhJ zJ#lW*TUdC6&|uo+rO3X~ULvsl(!k$}uDfG8P_{STYm^-C19(NRmrO zwI@3VlT4ls&`&j|nDy)uNeN<;XGk@2Sod-&%zOctUOCC>n2|I27%c&h2x|`q#10N7 zpX|Lc!S+*hTfzwzQq+4zsxTE_)nuGk%(RKT9IM#YM^b3)|rv)0t8I@PwTL+t*KgC!uUU-4X)y93xX$;pxtEDok-X zDtizRC(8JOf0rO61>(v;a4mKfjaD=rEQ{Vc4?ih&hhFv}*W%L|hJ-}ykPeHuCxzB>UuMF-fZS8`+!#w9$p{|Eu$ zOr==gkl=2j@z7>Auu{}I6ZpWxF7uy0daO69x@l`0<&aJrN~@q5n`@@fpfY~i1UO%C zn>O5&*dx#71@*e9`fOcmXN&kIR(_>dkONH9VB3b}_}k|(;HJ5boC^Orqx-s0KEx0s z?$}Qf())IAR9go~^hZcaWT4~^Q`hUYH?%b{wH||@Aj6^icv|j2FXMlAtP`qWMLBnS zvRSg_>+F5|1?OGGhXnah)XK!zDSrCQ99n)QbzrwVdT|f2>9qEu?jd|JJ zP6hO-vL?5x{!!KskT&__&(c^&f5cKpcAF%D9>1^Zmf+~f!yo~F4*dh%4viMPoi#=U z=d-sXG{{K^k238r=5Rr>a!Ri@+R`(+vkt1s!_b?F)pZOYv$9WK00$buJU3;kVYDY7 zDY4OP*QYW|_wN&sjL(BnLhBn##LPaI%ja%;OTKIm{D`3*J(igiVpjrrz>2RN4(3#&^+$Lk{jK47#>D!ut05C>$1Aoj|Kl!q$5Z(EfZ}}Q z2qv;hMjk(iPb=XEK3h*Z|Kmt2AmpEoFf}-{o;@=0BG8%IJaTQBQmXJvh!ge|g@W-z z@s2e!zhX4vhI;#Mp4bQ6#dMX{4rv+1s3RpFudNuRxNI2ux7_}@-SZT_JEP+_HvEZJ zFmCT1cNk$mtu_-HH~W2fHzCPqyJNlHYySmgn&%J{2XEwx>jYB& zS<*>P`H_TR9&&V)4$6#Du2+O=?4Gb1rYNAF+a3K-^P_y#V-+Xm_D%|46??Wq@zxhm*8egb_;Tkvmm~W<{#`~;}T3NcYLYmzADEcsK1DH3UWFqG({ z>-qGoZ9T!$HeudU4~&vkEndfOTBY#PMS(1zsDwj(mF{&B?X?>KAGsXNAALNE2nMaZUy<2i&fli`J{HCyUAhoQt8qf|zIJI=e9UB~#EXRs0BUVC{x zlN2&F=s>7kbT}rwC4Pj9PRO0quUEKYg)0nd?RMLzSohy_CRwPx7~Vg>m|h|0kJs>w zRhs&5+Ad$sNcCB>sb<)+eree91+l@SuFO;rEywkDrW)}jT`IhB3{pS3Gkl=Y-cN0* zEivoY_-;C%*d4^uWk{W?4rI{1VYP)?p^neLMe=cgo6@}fN5cox5OGvrU_Mg=kO7- zOQYywPLZF+Qy=-Gdh&j2FS@!1ISXi)EBYw@HV6M}CN=za;y>)HSN--{YOx=v-Y3kD>0;?^z!{=_wJVgE2)WIi0{NL}K7EBl|nG zHeq$as)`v)P$`zJ`v`=;d4rMaZ6kQQe`b~)#4OVEhhbm6UCGpSM!-;8?j+_)19dz; zKa&V))Qq+FSt*_p9D9q%Q=QG2g`USxrl98eYnCDTK zaOHir&(F;+gynwKZ&Ify)ujEp9aNmeb{F*l}Y@8ZC=Difstx{9L=WS+^$3hD4elVfr2)y{G~+g{t0Jb~r(a?{7s4UbcnnVPz-|okC@k z&onivGaIN&WA@pF=3VutWPoecv@~$4XasG&IS5qU-jEv*j|=Y>vsz~xa3uXA&6=32 zphAhQ^aQ`(o;dRidS3Xv+dD6GVIEcr4Lw7}SH;BYP@+>n#^({fbs{kcIG6a~yUzz^6x2W~NKiWZ$Yf`S3FZ@z|r?tLzH;ma-n&>*RH0f`pO3z)ZCcBYoDu9+kG@u_x_gqZ++U|xUP1N_~Mr~f0EZ;EGOLEU-XiT;K1UMBM!c%pn~hB}`d|1P32qY>G&1OAb@LM%Bp*Ue z+Mo0EKl>$=sdfHJIYNUfj}_PqO_kcR#KP-3QVvu7KjGj z&Yk`Gz3+aQNnM+JY9+pnf>?g;2cQ3$F`O1~$W}kHmBu)fP!XZWpJ1kpSd>CvvhObM zexKqz2bqgioF+XxT$bi0$tLbfSInR2SfQ>tZ^AN^e7`j!>LC2|lzuZ+rHNKel^#;% zxW2KKrtb6Dm&fykve=rR*R+_vRX55C#N^^C55;l*LO)9dCu&UdgO!Kx{puJ0cQABg z*Y}H2Elz##XZ7}^5#+9_fX#;$LxDat9(6a_pbhf$`;;8^ghxn5-UD1&qPXgZeb-iL zfp-? z)M1z?jdYUMQBI{A4!DX-PzV3*&BHFQb&}NN2o#^4ooY8`{_6S@oHKt(bHp45-+^8u zA{2?f#2wM>ix&4W2Y(tmu4TXR+ps8eqlPk~_aQRSy`stWf^;#56XWffw4@~}sF|K| zVL>U&1Ak4l*YYZ1=$Lx0nyrT2EirwTPb^VPSij|+gcD$CY?oX(RYV8DE*n=Qos3WY zA){oP>&FD^QVcDaM1y`V{J(M2?)?ua&`!^URABDruPwAzif!oS2YtPx5>ZJXk3!K@ z7EiI4W^!Rx4xeoJoOo13pn(3x8$wn7*zdoNxn3~Ub0sF{f4p(PbauPn0~$hJk~PLi z+Ms;)-NURs|Dcu}i+bnp{$svpeTJJrO;zf}aqea5$7njxQa+6!;RxNE0k+B9K=5Mj zE023?CLj)_UyhgB1`}1w1a+pEGqfoc)W&U(EGkxgu(K`ACi^VNM6o}boiMn7wo;n+ z>xG)w**=L*4Gc|X>IhXZT)$5?>3pSLc62hYmjf9!BFcvNbfY;wrzVC8;FEp@jKcx< zw~un(>kemhMXE4e{RiA{%O>@7mRbK};w`&PAk$4?Z)8-A(;n?0XkTU0iIkC6Lq*HG zlU8yboDLu;P)W!Z2u?Yo?-MriaqzEAEs#AE{pHI4ECY5%LW&|rh)F5{Gkf~>PG6aaUnkWVrh-JD8A~^+ZBfgNlj4E z;lEGT$K-X(o>!)9j|SI(Jiz)b*+E>BA6eWBwX@&c^UJyTqlIz6?>3J{?3(f@9akyx zU^G7JU!ANDd3}jc_xeXc=4Ai42wPbr#Y@h+VJ63wctRI?EsGjZL3gynkbqa_@zcwU zRNZMt%3AU-oJB=?g=mR>Z3cE!oDNU2`VJuDUF#aJg+#~e4_FND6H*wB|K)lXv?xm1 zUDO5P6Lgii$B9Qpnl|BGuW6aunep`29%sYU9jviRg<@lMlb+#c<@Wf1*6=ucwdpBDr` zBK3xPmsr^cl7iE7S+)`1a$;J)Nm6AaCNyk1OdCu9Di+A+#Qc4s{IFuvpFa)W%Veuo zj?eB+RVL;*i)dupl`%TeAt+)lJy$moADL2pzbb4#J|>cy8tO?j+U)TU+j5)XeLdR}k->;b zu{r=108rz-=-lUV(?uuUx0dvc11}%hhk5Kk8;91#gmBxYLwzOQXI_Gj^(3>!ImvGo zyH{P4%25UAW%YR+HXd&MpSDszk1p&H=?Z-pXqVGOv#B(5gO`<-*ognl03NpNTtH6v z#s|V=XX`tK34d#6PgufnnLp&3mwf)BMO@mGC0t~0vjm}NMZ`|cpY1cQ<`uNV!G#8z zZ)n`Ze-as*IdaX_3rvUg%7Mh|=7D!)ZAG54K%0P!QYxC6ylnerE~fxNPe*ntzW*6E zAFg7(v;y4`vJ)a^IqM84+Vj9RLwnTv4`lImvfP8EBupExN_u*Z*^1p|#|-l%UR&^G zYK{uG&dX(2}$ zrqp}-YpnMq3VqSI3aSE&yUpj%1msWj>z{X-+aJb~f@5hIXF;{kSQ&SG$dcKi)=(Qy z2PjPqj=*7O;p7|jr{uCcpImH7|FHG;JM4I`MOGylff;C;)Co$!OIhs1{{Y2j^P_is zla145KJ<#(1$C1nPprm4myhCgZiylyiArBHDVz6XSifxNhyJ9+Hlm+eHaGlv7r+?Y zXlsusj!wtQ$Z(o~^|RrTw9EIr%jJG0>cq>*EN$~s7$&)$a?XryFTZ_1#iUpWSY4=FLERxghj_JW`?Ch+|d;Qs9c@0chLUzu++5v zWp22)!;hZ`7kS0Ws})EgQ<5Ju`ytTYBBQ!TfO9nw`N2 zpyWqnPN`V*5W5dAcx;h+9WDAAhjNo&SU`)Uz@^G*DN%0i=}(#A&nw!p#O&>z-qdUV zp##u2Jq+zGcmzyane%!C4=Qk7z(TA6Am3(1^`|r`!G{5sLm1OwuL$@6+538|#9-mEI ztsl`1!j5flT}g3Ad;xxrpkFH}%*$W|o+h zw(&nDTKcOeYk%MGVjpI_75ChO4PZjo@vc#)!)a{W`QQk9%!>;OQ0I$$SBlLRI#ma6 zgulf5r+;JC3-~QOnfDBLZUQr)msKfvfv{;JPPq|dY!AgMazh#dq&*(_k^k|XD9m1i zIX{L(#zc?sP*O^M>Kgms4^iYu^_kz1DDS$CDVfs~$go`J2kht6aal47Yy!yljN*pvmA zH6EM=A-;bu>)Mz&WA-4T3$r4g4pr=~24sPl3e2nhlTNZMtOrz`WMOPu=S!s#x9P9q z=z1eJATi*JYq1!{77n&r8D3N5;-5c9oV$kO=KI2B?{m#-8kD5i!;lI+nG#BZ$!gl6v#8l`E3!hpL-mMe=XMfeIL8+R4lNlum z93*7HQy2T|kHi!?pEC=yi>TA1!3yS&>0ilk4%WJSG?MoVL`@zge}GbqmHGl-x^w2`%60tyhlP-4GG5zwcrU&x+qjAma&9Zv`d&6tGp^gnEOy2 zmE^sC55ug{8j(*&A+=|emAlr4ovsiOQ}I7QtS`2^-`U5ukLu|> zn6d&<7-79xkPy*owf}tuYAXxvtIV)!KAO3V2>Yx^dFNVLSLmU~nrB%O5IX(y%eaA@ z*Req4rQnM0(TFCBfQ+gpN=oogT%fDbk-1-9<^Zr_fBt{Z(CI5 zNZWAcm15wM!AOaD1-oX-p^A8+;uNfxB zuu`IxdWS4cX@hZ1XD&ggg z0`LEK_ZedjryBvmpIocnRu;yEbLiNQ6o&B=c6=Y1E$bSM+keg8-6Byy0441llB#dp zHr)wQI(oUiGwQv>TBw0z_-`OO5>Bir%dpck?)< z(cdpe!+4kUcs7+nrB3ai7FibKnYTH?)q>B3j{|rU9*sJuiokZdtci}_KlJSTzrZTR zjeHCzs%Xpp<0qoEH}K%$ow5I>$>ovu=XW?g+#tA$q~0QZ9q`^Ps51S9a(~bBcFcrR z+C>m3^yhiNq)wu>ckqnR3EBzWYeLBmwUJ;r*~0jBW(&*sn*<^an(_R=7O_GF{azd4 zV#smBkB(uf&bzLwm#6hQ-dBd_BMkN2Cr;}R#$?Sqw%U!2gvw!;A0YeKr$d4{7FfJD z0nt{e`lqR_=mg~x+DdsDlTU9FImL%Q`#-);oI-@k{TLCvY-AIfB?1izJb~?F{#O5N z5y6UO1^K_vE;O9V1JyDtHpo*PiB~hJQX62t^%DBkraBt~-}_%h#Rs~_Ju8C&-4{&_ zUi1hx4ne&U>g(Hmab1O*Or;PFg+>E2BAZOmAdPS2h$U}QuSdNzIwV!aJI zI#tf$KgPO76R!(Mq!xe0UwgdZaB?tI5Wo{CNo^C}ifqLjn`IqsHvd~qTdgzn$fWkS zDDp?l>ms#}6P8Z)LeVDj0urdjADcmLh(cvJj=*KL5jh`%$#j1)Y$O^}$G{3yen2=f zVHxf3`|7*MaX&`?oLCKb6f0Y6w&=Xd=&@%)9qIu+fTix9; zyuB}R3Ovj;WEmCtc8(rUpsns<;Tzwc=96BT)wm?p5lnVaQ1DC!j$63h7_2I!<;n+(K@D#A}F-5P9pRwMs1MC8wg3L z_2ZWg+rW@%1?1U72<&W2z4rtrasp!R&ouk}9b*mO!moG+804*^ z=Uf&Al=ml&-3F%5nUb|9*bz$Gn3U74Z9n1Hy8NEQf66dcQ z2bHQORWMaAMUokl`p3J6`|y${ zOKT!!4o0i)fcd1hO5CLiYTtZKLUrsLYjjy$h!xo~N1dnlv(nlYFWH2xl>9w#v+i!~ z0yfCXSZWjlDW|MX|HlWED^v9*kLyOQ&aqPxaHfP-W%}N#z#umw@(9AJFvm?~fy}a6 zp4bKwCtR9zIjD85r&+l>2ru~%x*PQ~ViZa(!682s++GZda#*&wJ`nC_d)c`&rEGLWH6X2ez|L(|YJ{8Fgpw>N9K}{ru$oN={ELLmI7R(KEGI@S|+>FS!tq zN?$V>zyxp)6`iJ2*a7cPTy^lhMh={zjR~<>Mp-q=;ik_P8g=WsEDtO*xP&5z0j1!r z?fk8OomQ*gulmE@7WZBYd7&g*?x~dCCd4!v`5vxsbF3OgsT0Pv8mlh}+}*O)b^t(Qukb`wa-v_~MT-nw6cLGfv{2 zv=<@SQqQ7qo>LEmLwP1%(6MK6j%ZZ<+vVTFD*719S|Ysf$x3ehly{+OB9p1#CNHdO zUy-_eUd!}&EWfSgqf_#)NB#@y`ucqEJW$cE@i`7h1O*joBgBWptU)eYpEvaGe8es$ zN?6&Ks1`Fo3RBKSqEV(TKRWQ&`L!L|y{%HI38=m6IcY|UJrm!w2$Il`kqe&Sb+umK z1^gb4`g$%qDZTF^I!reoAxn_dH*6{3*p6SiKfw4L_)hlMK>gI;q|A|M;cw?&`nqoa z?o>KP9rO;;|B-@_BtZeTxUS^tD`^72asroFFw_2NZ#(bz;ScpcSLe^liC&XhM|5<$ znX%$Xlc{pcRp?~u8mZ}1!#yXt)7YC?*!XCQJbc9J%_xEECh4~niTmHRl%WJE^2Py2 zTre$(D7DEeVNN36ZT3l+aoB6fLWT;8z-jLmOiN{+gt2tK9(1NN z995h7`)?>RqZ6MB;DSm;b+lT+>Y1M8EoMZxlm!^R`@Q5(x3jO*-q&bB z?Bm>=YaBT_@%`lM>FdDZy!Cw+^$U5c8L4|Po_w?_9xv^$c!`@A-|jBUf>%e!h2fCA zVTrvXoppxcbp?3Yd|8pe9dT+Czp(n*fy_OsT2<_J^MCafFvw16A>B60ks`u{FLOy+ zyS~*e)Ow;zC3&r{eCJlh&f6PLDXgo_l)&~#7e`gfnb*|*P87z%xt~s02Lv7BHz7AC zJIT~S1`12ym$`DdcfL{BFu`(y!qsHpQ@s5Oz}-2^3B6LFZ%^>U!rFe`8h<*my4%UG zcYC7h4NLlTpqW@|BzKKG2lL@#qP~9PFp_7CDrnubB zIF!NXZilx~Pe%!_BP$Dpg;=BlZ65og0MImxgm>9&&nhJ67c8O-KfN1r<$_Q-VRA;k zOQ=&mKqjNSSg_7O)tb&a{yhSIMc~SNeDm;$7+(V&01;`gl#D1W{!# zQ90W1;dawSqrY`8`}1-owYj&V+LSrk|2?fAnwzm0D@OcFSK_aGB`xak*3iEbGd@$( z=uu#_R+sD>rdLP!bmV#aU7#$N<`Ma!%>>}!kCcYDTqm&h=VBk0hY=QO=_CCrIw(8tkw6-Wj#D_YwbPYN1&c;GPh z-PBc^kV5m2>Git zHp!z|P|8jZCE+sYCI6lLNd=Fa-qT?a4Rt}fS#P6_>xmS&r-rM_0ytyK3=jsW8Gw#9 zgLzelpg0k~h{z#AEnbiC88x5#OYG0JABkq{NtUBc;W!Xf9b6D_dsb~TBkNTXrO$k4 ze!*No>PE}tyP%OUDJe;M{j4Ywy=}C)Vg<%CGIh`kHgx$p-WpbnZNF8opA&i4^-&hB z=yD}EJW*POJ@*3DV9`)h# zVB2}u_}~Prb(3r!9Yux@48@z?2@0d(!?)BV(BFZbd`yTxF%A&EB>Mg%9BNu4K3F$Uc7N&pnptw@njE@Rd=g=US)eGfWv+4sK#h7(QSmz; zLnoSVLP@&TsPMTR{_tm``ZFR|FfuoQAAB0`xH_0>PV~Q9=mX$Y7gQ-hyUBrutW|xo z`z(xC(gMev&o0xV-_VK=RPD#`D`GGX@mlJAV@$fPO!Ub+M;C6HK87eKL@WuqDJM#| z&>1(WlU-HAm5|N77accVM{NtRQoz|(G zf16xadS+BI2y1}Y!hXAfBlK@#!k@%~-9AiaM!`ADC+Z*9DD+o^WZGvD>$Q2t7-TK} zIoZq7^ChoEal;3Ac}f zju+r>+SHSFbH^%*DK@T3)cUR6=k`-$!jqUlrENVo{x$d6nJ;joTALjRcH$0L zoV>H*I{i3yURe-_dHZ(%O={oQUUHBT@Iekrt^zu+Z5{)lrS`rDLeZ#Phh202dZ-}q zcNo<5%#JK}-MxpJSq(MgB0S8C1k&Gxpom z%@q%#Vp+NHLEyDKa=6lH|GqP-k4h`;C@1;!L@C*N%_$_v#e0zjdLvipup!LWA$TX2 zFCXK}7K6E00j7*B7)k=ff}9VWDdFJhkq=^b7MTn$3w?1p6F zwC9mk*o#)i=>y*9yQ^2`w?)<>?kBLUg4Nh~y0;eEE z40GMTZcp)?|0)Nma%xC(EM6m=UtO^tO>uH(yTWyy=b-tD_gsL!SphR76o0f#q#oAv z@53zqFYVHh^-g5b>aQS*D$Q1wp!ruh&z@Ld=hcjT)flDn%TsD4vF+<)6H~SSE8_sz zTGKtI3gpSJdSh#`iV5$Q;wvLo(|q)eH5E!lY{_-uvWKUtWagT1c4 zy?5OH^fo_9enZ%wPVDrb!!ms(m1jv=q8OrplY@gdM~;tw6>f2!{qAr{Br_|oWT4^3xEL?pbW+~E;bV7npw{fUB`eW)~gmp zy2I%?1>8uzx>0E-JfMJqNx(1b#h_8;$!A6wmXmz5x?P@;+IVK8fZ9hI7XF`ymQs#; zbU;A(>MES4(QF07P0VOd_P@M?D+JU*Y(N=ll_2C|k=qa9k_v z(fJEa`h0@N$A9}6Qje!y7QX}@l#x6MGKG~C5M*o|vbQwO9^3vVeBW#hiYw$|ncirP zV1HFqOtC)5(?d?4+wLBWtv}=v7I+o!n6lrGi!O3h$|_|la~y%vP76;JJ4C%eDK@=i z;st2m4G_y7f zWZL9l3ZUq$uGSG{W)tgAL228-Jkt_?_$&AZX_C92u3BW_kHt0nGUj^(y2E_?dD{(H z&UFG%S!FlNzg?HT%l@i&hekCXvA%xwOM>>0Z}L=tyHC_&g+Bys&mv(erSTrmwbl#1 zwYCd#i82aDuD;%~lI5Ti}?7 zojV5(>CCTWv%okZsZP|oKCpJ}#Y)5H@yj$~7XB#!YNkgbxWEtf_Yws^sse1$$EF(I zCtnM$e+L8Ln6v4-+V)*;x^TQ0h^ZGT$dms3F3~bbp7#X8mV6XZbwzn2tucn6LHEAI zLuei1NEY);IFo)Ms5*yI{B8mkj=)2o&g94_h7LnLyW99=%aK=+DpLK+urzC1e6~57 zyu5v$2WZu)eACpXhcI*~8<6MwEHwVhWUn9cCF>kw_Q#7E`Dg#ge;Szv5mG&VNT`k~ z_HG(b3|V;a3rBAX(v{;Z@1AnKh~*jjW!#)jl8g|66g)KGTbiOAQB`9#R26~{?!4O7 z4_*AT7+~j7*>eToLFMX`bH^M7!B>DU_RMD+I3<7)^m2X36Ue0Viu#ZFjYa2OZ(iMu z2pj>3jC%)XoXO(RaopVy#>$LsC$35ePXwt`#mj$U33s(V$#=1S7CjHT7L#0h5@~L( z(Y`@^Yi9^AqYNF?WCg}lFD*N>=isH!4z-?p!Z5GOUR{cqG0zY6IGR2N50`vGF;qPn z&=)g$P=t0kZB|j7!{?xg%>y!6LrZe#L#|bguv+p2ZI)WN+^3kFza)w;w?)BZCEV9l z@E4Sg_kw&(LhrR%FpfFa0v?+Kp6($Ic`ebmbo8#V^^@O;lBu?0g`+VvZE=odCpJ_ z@R8`7*^Fhwf7mF7m;84Eya3PO2OJ(+!MAf%$@z1aWNX6jjrvNkJ*ZBMj*;yUm10YQ znr~=N@Z=JFso5Q$DjXUMYckHS#)M>>f<`E2Vgjpr0kjmGP!qWH&}DFi`^*qGhf9kW_|#q9Ylf@ zEHjjaxOnSVQKX8#(UHyY_`S=gQw&iHD1*F6M^y-E{G;q#=S)6!-@2r(cit#Ft+uK) zf56$M$;(oK{n60*v#XR3-r!mR##PTrTb%6ZNp()XjM^-s2(S zK9%6^EbBZ8N=C5r*O7h8W;bR(6^)PGmxU; z$o-$CT|QC0-*osYBCkn9$FJ(X(XqXji65WyPJ(nJ8gWb^{685&X0_H92~$E8DpzfO zn`6_DKk&v~W1@*IvSw@_WBxZ`0jHuMO~9?`kZqr>uFQ0`gl8dc>R49p(V5ON+`D@z z4{%Lt5wjA+o%J*-sw|&q;=<|2?9uozMwq%lNH8FODTmMMp^5-1+ClkCrQ^@m+yx3e>k=-Ufn&}-7;@>r3aZd$wo{YX6k zK!SlBj&s&3RGe^Dypb3j(ZrQh+Uewo8BZO1DvaX1Vly$PAVz9Mu9!-7zc%sjKeWjL zu?+QCPHb^9VeS1?GbYb!4$X_Onej70eoe=SgvPj~#_VzCYaRwc%y4O4-4-ze0|S25 zzNe=rqdPK3r=IH|Txo+kzMx;U;3A6KIjqBYT$xz45*GD;^6INK;`xg+r_jx#r16pa>J9&2la=IA~{J*6FEZBBhwu2g-~#YQ05XC*y>q0W3a!)Tl#8uHg_zL+_p3-N1it31PZ% z<6KFyTBm}skD&t6XvXlKl4en6FV`XfyKtGu+7c#DV@BoK;oeEyijUK+%?I9gin#X= znAAw9r|ZyHPkUn4xpmX!O=BlhA#9rrA#9B#ZU(QbY zvgJ!nA~_wFxuc^O!16?7H(C~i>}(#JUS7Cx=G<0P97MIJaII)Wwk4YkZ=Mgr%2CUc zWz%`vuk;;t0q(GLyBF;&8U=v;)voiPlhDLb=Ss47smHEX>9wLeZ=WV{U=B|Eh$z#+wq~Ew*Xkli*=U?xw&$-Y! zxpgfd8S5TXh8h=Vv7+MlwuB{@h9{p15ngCCwA8@$aK*F9d3|r^NV7GEbAg{GJr`k! zkl)KSCSGpq!xA-V*0dowx%5&D?=t7HU=PHqkzs&o;n7;>y8DwIne_m5WR z1tTy-CS+)GpRER~5P8hj+$Kh>dW8@&9TNBtOi-u3r?rLKzpNPu{J2q~8||lPaz%Pa zi`~LK+>lYr(L$B@HZtRsPH&kyg1aCgyY!ItXoBC3emG==8;XI8T0rwLHW`tXg+&H_ zL3lwr89pX7OS+teaf*ZONL0WALyL|`*n3ZWGUszj<%y<^JT2oETpxE*sy*Jtdj?$= zM)!GMwyV>d_RnS?X9jE!azuxR>ACV}Hnh%_ec#T8Y9b4(zC}Xnv#BbmgA;N#*-P*a zddCNaOCTr+Gicq%u;8aKuN&+L(bBY!CaMr6MeYqu&l=KPJw(_Z%DzHkWMauMEq=Ai9zglI_%3Ck1$G7)^ z)IA=!Tnrfn%L7K)6j3d~x+=4D*2GVbCbLCZqi1V9){{Ad2ott=5j+@LAQ_s&;NZul z2hz+z4UPkws9w>zqRb%gkbyKpQTZfc9C)N0yWF(hqAK?4sp`EtJ(^0>PxDBw7QgXK{^@Vl6{E<0eS4S&1+53jsfuB{E>?lms7sYOCuG^XQTI zJre{X31aP}(R;?Y)!`@QyB|(_7EetQwL`d4u`*`wh%FX5mLI8nRowQOWXl3uQrHV| z6^f$M8EcS=N;i+@?O{_lVcTy;vxS4=H#Cy$WY4<(mwzpJdEZ$o4b%$895m8dvwK;F z$EeCD8{ml%S%pu0t;N#^w_>RF&oJ1{mL4lQ5KF?Zpl7@8UwD~GJ?@vNg8g*(R#wIM z76)8%Y-hx9LuhS#&68)k#-?21n%*Zi7pw-$)zn!})PE&o~cE{|+)ONX@R{6&=C3-IUV^+u~+Y09GhkRG158(94 zGZsubR?(fL^5eWD?JR~+!Lfy|p9GGS>h=Cyj=7~VrXe(pjFb%N{RMOhE-z!V;@&Uv zL~Wx4;}m4@R~?L^GexdIR;^01*jCfEQqD>*O-+Lu$APcgbV0%%Y zv!|x9nRX?$H};coicF}leed}V^~KB3xvYg^N}*ti;x+Et&xFJ`d(5r!AA5`&voH$+ z6Ab+26UHd&M&s!hi{i%(#pIF55Z;7>2!)!P?#)k`jv7N6w?0jxz{Xsg<{WYd6JVB{Y`OSXFoqMlo90)#97jPmsr}_s}?wOfSNbEr&L#u zdsrg14C#y_=uw13#^f{&TzaP8!q$s5hxZ*4+``uFM3C5r645A8CTQs7ha5Mbx$G`D z3M$C4$X3oC-k@O>h9*+dZv?A?V94ihJ>)y~)#yJPw|usULGtL7T+R*8{2AYerm>L` zwn@o5x~pd-C}DwVE&k;P)dnyc!bySZ^zX>g50d*MX`>DhN~c6l+>vO+0;&XV_z-C} zg}cC^3shqc?<1?ILKbO?ZwWZ?vfUOTei1{#it>a+!YhGatYN=$*g|~@`--3dNV=y{ zc}O6br7G}PaNechKa0;C2pN)B;Gue3Nq1qY@1yn0=Ha`L*)>0ob4^G z5R*>kmxsG#?$#o={DUT}jBDX&Z&CR~13jG*=YN)wdbbGKMXF zkZIsMW(*?Jq{wzx)Cu<+vcx*Y(t$VC>|MD1ouwYkhYE3J(OBr+8!Jg#U2gWs?7am^ z22sz(CT~Pq+W`?9bus|0FC`-(n09>s%P)I%Ru1+MX$O{y=rHN%H{!3?*uIAc$2vJ! z!1NCx3oNFS+`<;`UDjDGJH2s5Y1Ps*nD=wd9_Iwxng+NypCpL6I^=%-hX}0GX*9d6 zYmtS&_D8Z(vrr>_h(wUmD!`}wlLc~wsS95vU$#Z?V_7>s!EXtu}L?ZSylDqm;`(1Cfp?ta7;B-T> z`X`G=NZRhF_c)zpBc|?A#|Gz`oFqRMNn#Z*^@{KQ>qm7``p#)iNO%P*7)sg2r!Wv# z?c$q^v0xUiyGHyDB07>(B3yf#xCZ*;MfTWe%BQA-Lc%+8jIn2_t!_YkS31yqY$=bYLqDs|aPYG>}Q7r3AB+WB1*}fel0-;Z*kcj+f9Z6BkFl}>O&2N73 zn&6*-A;iCm30^Qbf|VaslCR2uMV=dUBog#=vQBrcB_k?&2;rTmN|AUw1LiWTtS$k^Jf4|(t@e)|8go>7|%=ET+-l}|!u(pf121s%oUA)!^1 zL#hN*o^>fqEcW#WI|t0p{d88kkfPbFaN0MPX7m$lv$qEKP%2sis@nT+35Tc`t^)5u z4FKO4a@lVN-o;sX0|A*3Kd9b36L!ANn0%j+8kgNi937}wFqNLEaQG1o8kXvY zT(QePKn5KU^qjdqeU-@XSXh;Ot5EIPZjndR`sn!(Z`Lpt9WCWY%Erg_o3p1A_=U#9 zDsl2|t*rk1tLkgM26b1g0YKwVZM(N8+ji}2+qUh=wryLJ?IvTg z-DKO7G1>L)=Y5~|_x;g-b+nIrU)Q?NwN9+;A67NrVD}@T3o#_F#96@Sgh1#pB(-&d zQ(|TfDHqd>?nqliHekDQB>lF>r_G)l3a{huL;Da#Y_t4P&2v}huQ zn`IQa3S-}Q5F&_Fl3HTB+>vgCrXB@TaYTHXazD*7L%1w!7ufhcqo58)HP{jXnM6A= z_kP|XY5wsL{mu51*gRQwFcwnm5jagWO7AepLMsmH7|1)6Fe(95P?zV55Y8YVV|FzD z*JL_JVDNN_Qi;CzJ{6V~aT2;_{Y55bu2WFCz{PN;(D1Idt@rc^FC+NjC%*6#QcknB z&w1zdwPW8(NZ-pDWp$2c5bG50CXT`W{Q8@1oPGUyD~#W8bAPGuiAwBrNm)%JTu02C zedns?Uj=WijdW>uq7&deqF)@^9-I@_1~0thpipkyM_d~H&qTrA{yIHmad=~I;81vx zeTC9A9iy{rPt1ia+E9gP)XO&8>c53)e6kw8>;XT%SjU*+{teER*Chjvr}I3(GX8Ck zXQpR#zxtAtta%Pp{3LU_nS(ovj$fOp4}y>>X4x0l$!N z={`DerE+H>wrJ*GfH_I`%YqwF0_vF-e4OW(1faAIqCc&=q5J&x>-t{Y}#t>?#Pkqm9;Hz$zn}EkfkQ+Gpq7_A&+1 z+9pM-lV70IJ=eyDGb%S)0@z4Y70HYCQgL^Cry5YzmyLvwiSjv{0l~*V0AzgA#jT}x zTEY=+Gp%$R<#ia<-i*dzhBms+-+Ds^G5@}ZS?_`Y2mK%rfNlwIyMx25NpP@<#^`)? z7{ljt)(PIhCB6~My1mmfwsO9gGF0P}{f&lPAxh_ayWZj0TvLvLSNzfoWxLZIFy5nQ zX5=rLS||7^i3+oI@?2=eE*kBNhT2<*zu+@jhbZkG9*k6Z5ywHy&lRAq0g)nzLdXuN z!p_g9W)HViBKTaw#nUmTdc!V_{0Waf};qG-MWWr}#YY}JC3i`ay8h@w*| zPAc6D(Vw@S4_ROqk30^hZlP+k8)D5~PP}4>Y0_O}4^hfOE`;rAV*V zuFuRDhQ&1hsD-A$;X#Z;eTxqUy-n~kw!)C|sc|ivd$|l$-&U6O}O(>RPR&O-Y z!s>1}T;AUgU;;yhNEJem$sK(x(q&g1>iMk;s+n9HGf^fR%FHWQ4o+@Wtexo;zHQpg z4^lzp{MYm*cZ5W2N7=I$#?9L8aQo|&h|+!ioz)3kzH?SXi8+ED;#fg&@O}UCCoCM3i!I_ zX8wdfZ6<&b2j%-jgq{Q{6n9*St^BM&3b#$j!8}x9GWa+_r)5NqYP)teI4$+w@>keP z{lvNA7r7!`*Ee~n2gIOg5!fMuJBp>ZSU7jFK*xOQu)MkrQ5qK&!Jof`=^Fe5e<4L( zuBb*^QD4^n)CBrjegwQ6e97L8F}h~-xJG}^s8!?pB`fwk6RfNV zid8AU@eLCyKge&BUd3CZ0_?-HnTOgtdivvZTPwwH8jTmZP)8tPsrloux##nbhi-vg z0P;CVA+ojXucc@?0MBh)Z}R_;@)*wb=Xq=!j^Mh&MGAzg2H%3&QuQ}(DLrUq>zqhb zr8;7ouqh|k8<@|Fw1APd(qrXU9@|U9d@j1 zVhi0x8U-rKaQM33$tJRtT#faUf<4`Xms5(=J`kc-^{WLk&YeQ4)_+zj<&)XHZ|UZw z<1+%r367u{?3!lzcWmOsMEcZlE)ZXAFL_p4-5n7!ASc19vaG>3c06LxVJS6!WYWrR z8dnkA|B_5QPNMop>jA8XJ@Z+f(A!|=!SOMIvc5XM@HMKJgK~TEvJ{g1(o9hu&K2Ufl${+ad zCp%P-rKoM7w!mNo1W^ROg^{I;NOJey54WmDvdZ{G4Pv$Y|WyBF$pDdmv_}SE{#3%zFFG#N>=lg~bqU!{s`%+>{BckmB}Y z%_8&s!Smq2(8=f=GuXIC96mZV=p@`TH%}CwSv)bS?*=S9l)qsc8wR!%d=t=8deBhR z7wqg~62iD_&y3BUO0u?|kiW7qrc8xy9LI_9`|hrqfeuZKsg7jh=f7Duz?3WrbIh#D zvH`MR=HTP}vP#(QR5gP#Ut|HFxdGEDv@@!WksFJpu*4&fOPidOccZpya@V;|P1=;i z^LyhaGmXt1p&#}UGd<6NpCS=Kc7U*bW*noE)L)Um9z-6=J$fd6_2ee;;wX4(<5Pnq zQqO@JhYqKd8e#dhQ?x}Zy5PX5)?mtyT26LZ_2JAVb<7ypGvyxOSQbda{ZqRi%@k~w zF5_iQZI5=>c~)Cm5Ra0qn`CJMBj?AT!CM=mKo@t3)(LC1hZD2f0%P>>^1Dc6O-s{^n8(PJUFLR& zU9>h?bb-1sU1|__y1kx-onJ~Wg^K%eBqAFM0`(fJxR~mMer%Gxl1BOu;JuYRgEZc> zX$N`@|J%h)awc>rL^m#U%>GTJD{|B8HHq$287}U6Tr_m{|Kk-(C?&)PLx9!CZ+3cU zPLf$CZbQWs-!f?lhSCRCAaxG;ym%%%Mmxcq{}ulGoJiS+3==^j#Jj_5SXFIw@p@kM zEeiBZBoY~JIJjN_7noZIx#Cc_5J@a9UJMdda^Q&9E1h_+0Elc@y>@Z+ikcOxg3Kxy zvdzr{rVDv7<_7~Grxzbq76Y{%)Hm7Aa~l2Nr`e9d7ogSR>KP9Fs1HQ^Ep;I3uuaCANpk)AIkJnfC?KJ&meFtWvh~81kda zi)P%H6t#jq9diggA$q=)R?_oqG3MSZ%vf!X-dnA308kkdhv~te@Xb8j5|yq+TrP(K zy0~$F+HtI0v#zO!KTye7XSamPvTBZ5&n&rH8=%DL>Zrg#-!NNQV3mji6-wvvUmp#S zDj*(4Jn%0BNkb%Yr#k1(<9o#q_?+n7ADYmf#CS@)jm}v-Fje%)TT8wM`md8XeA_FH z9VbEKFmen8W}XaRWha#L%{Qp3iKT*~P%W-5*G3O3n-TCJN~ys#-GQQ-n3?wOCeahu zND9_CM^$ii<|15W2xal&g{bMMFbD-YdX=m~`vMU(722)$+A&i^sCM&z3MnCPgNY|z zC5Uj*Zo?21x#Vm4%V$%-U}o4c6V@a?!ex=7D!SAoqlioT(Bujx7pugq53J34YBTd$ z23JNA^oL{U%FG9jlSS@R&ohK>NVX^WP=RNP_t8Z!y{J+VPHnUX#-R7uLk$R){iZ2X z_36WLB_2s6;L3*sQZDucM6=W}WVL?t+{xW6tri%u(V-nk!BOH~`XZk+jt}{dcnA0q zDJxmmjtCvx;ADb2>YM8aJPdtvSx56B&dY|4zm2X-B!tiHPJRk-8&cj;qU|k=ZbO$G zEG`!0O>S5t^K^agBYE9EYY*W!MTQ1e$kCVaXJUR^P{@Pj9n`nq?CQ5zscSS!GByed z7uv!$Q%0d9W~lje2A91CRX0XERVPrWBQz;ILpB!Mf(BL2;VH=~016Gb#*+SlgkG^s z1FjfSDKvoU5QNmyQq>&62b!RE4mbMJ{R}*SmBXYT-4DVa!#O(#KLex+$0sG7cbm$1 z5>xjm2Ue8)ob&7YuHRb5`FjCRe)eTMX?30@hEVMZHmy$_zVA6X27(cvprO2yw^l_t@?@j5KlzhteI2b^myOFOLH+Sd-tK_r6mJg?i}$vaM@mVC zhx(?*ay{KJkp6D7JwW^<$Lu5S3yQbX0c`>?38I6gXc5ItHAHPT`*^wbW;oZ*-T|qe zNwP3{X}S%g(r0MNF_x*P{>S_!jYK3nzP8@(^8{d@ITO2sxHeF^W#8IX?*G@+)^K86 zW}Ch^WSV-RM8vwDzx)Qi`%BH1=@CtC@kDI~8jnZoFe1W#8Ff8pP=z5q{1i8qzE+=U zqmodcZm$m3DNTLx5wcK(Z^?t@AEn~z+>OdmC>86>ewEA940J$sj7ID`QtM>5cp;YnjGDqjg;FX;gLDxM z1UrNSKwmwczJ_Jz63xT?)ViQ0D0`b(MB(y(NMJHVXc&4OnGCsl;5_-|(+SwB2H8cnph<7GRJHV zo7Yycs_l`Z=?=++UsbLj>?Pp?6IAZfqCN%wz)u1cgtidL490|;izp)J%W3x78*T=O z2D*0tV-7>T9`Q>IRPPEdH`cxudr{Y(>(3-pXJmZkQmgPbUdbaY&;2oF&{=rN`=785 zfKAeICSYayPiLO#fB}M|j1JuWm{m4&nlf`c-%eCCi4t4@>6YRTX=*I@7rBcic+2Nf zAbXzzH1uX50RPmnAn%3i!v>veDd@MBjZeLrny>!@YVX^LU;~ zIn&M^I%Le#GuFcils4qg&{J9fO>m6o6pES?6;8 zC=c1WfnHivv)WyiO5j%^?D?&T>iFs`HHqD#2HhZSm zms>iEzBL*;MGjUd77~bsmD%rR73q{7+b^^k%fXuG0jJPgM0fA)=|MsZLUmdLRLHQg zzpTo>aahk72}46{zhdEQ%q@)IN>jTD^b{_@Jp9_K5f-ejU-t_BjTIoywJb_o(OsA* zgpDVvr7O17aVI~lN^80WeFPqp!`Cx#6Xqp?M(KVri;LC#RIue%0>sz{QIcBLY}(5)FSj6ci30kEJzZo7AS)Tnl&d_yq;7vqpP?|RsF(C&20^>>Kh z7__l<$}NjVCke!h!=oT}QG(u;kWq;C$*xdH)3AZzziJ}g1!;2Z)86@tA{B2?gxnJC z1DUU}T9uRiP;m;i6iuFMMw?1hLBTj1d48U_em*?o{Z9U2okZ02nm(y6spK80Q8L6x zk|pDeLIN@6GBfab9kkYr_D~MuIDUgkQe_euk z;lbG$k6@l(!mU4ScUq=*X1vs_gF#9^p=RyT6nfh&t_euI{0rMd3JG!VmYjg0Jd9io z&X^wZvXYeauM~);5gt=zRcLcy%>z*G?ZZr0DhZH!y)I$rt+o5`tE)Z3>z6hch^^4P zplJ)CAh@AQ-i<`@KLBhcYOJiH=&1~-$Je*}KQuC81E9dw-(d5$P%N(u7Jm!ZtuRBy zpx7b6>)|VtSQ00yR3ZPh9*et#gNG!IE|RoOwd)m@JU;RG0nEfaI+>8h?37K_VBX0b zG)Ncb;XQ2JImmBN+TzB8G-y1v5uTsrI{0Xr4aa+Z(=U15)ZmpZ+%#OV*6${Cz?-U1 zavy87Np2~g&TSk!q#RO(3O%Ipw*p!?`msw4TG!B@>MCWpb?aD0Q*XY#_xyECf4`iN zJ6Hw7%$lB6VTo0k9EQN5SYLEwfE>Ut4mTV=l9o*r2w@4{+NT$gXW#n!{V$#1^R%JU z>oZ!77EPJ)xq-np61>f@5l}O`_3&|z(E{4gH%@B7-QgWPbCxhWk;qd-sImjl{5!k6 z;)$xTE#W(_97gMN7sdH&2U>#7)b z&N{knU@h%fiy>itHS&A3HS@xr^K#yE_WE=J)574W1#p1&qyF+~%88SVD&ENM3?mtK zxYaM@Nzglgrq*xFPT**I1X7$tYOf7Z7&n-w45byChK*UInlg@zzD%vw$vQ_$<}TWt zD+&2RD2S9gz|Q-}A+hYakA8#C+Q^H3KBjO#Mojn%TiDDb)6@91l&&^oRuSuLFqn%EoY~#y#z-#{pV*5UNs%T!TVY|m&X}|H(i;?hf`SW%%Rnkzh?o(BV&MF zz&(FY>kqlBR|8$agVXhH-&^rd#(+1$o8Hg2udog8Y$K*-CY}ZoPa(ctY#Ot9cS2?O zek~wEJGlh~QLMG8wHhu-PFegvFkrWDk_2dwe*p0ir%q;b6cux_qw>JiYF2eUJ;1dz zj+14s&Gu3s(LVv-=9js)?LSZVv^p7h&8;Ao&U z0eeKg1RM3WGN>F3b%gv<{1!YfEuf>WHCnE-RIa1UGMaFW-~G}r;C`@oeeL$`9k-@U z)>x)&lnb-Mj%(yw!)Y_&x=AWAmjao{8Z2s1?qBYWPl%Q4`?lsg0W62!N!C%rKSL9$ zsq^JO_4&>W2>4ubdK4?-?WzVj8=I91SV?J~VscM+Y(Z@!!ZA{b=z98Ca}HJpv$n$Q zq%U;5Ggf$z^(r#0wM{O@U861{*?d#dko?UNlG{&(y}lC zkp(XCrGv%OCOQVXR#55^%f1U5-5%Ga4@#a9Ml!edb+7g z`h%fzK%Fk3*i(X>yj|GMaIokS16*X`?Q+g(? zPbs{ToBjVI%DN%n)Pk-7#Tl&eJz7Uv@>uzDS4_=SC*|g{swvZi!!)NOoF(d_`P7bG zLdk-6d+!M=V0ifFwXjD-<28I%Zu5Dq8>+pR%$tl>N_7)ES1rO7JB5UWf6!d*ZGY(w zvHqXuGu51{JlQgY!0aoliVjT>K2L7qzzq2Tg&F<_fZ+P8fP>qoD-YOgBI>z;>9D&e^lq9(!Y@Y(E~)_J4ud&UDmeIGJs%2E>@tYZigvD zIaH0$>@~I$es1WD%L717c=uNQNni-dA2g98Rb0w@MjQm+aUA@gUEFOEXgRD*S)+15 z<-ioiI0rPl9mr4@QIv~Xtm4FnX94oehmX4~U(b)d#~wr<1Rmill{ousp1OjrD-V2R zi1wi9S8b)EHpd3Xbq3GOTgpKr--@(o-9?zr<^mOD9`l$ z%z&(bsK_?tZy?v)&XgQAe60ph!2c79?p|{P zqR_V!^f<4oJoDbe3Sb$?BM}S>K=3$2dMW1&nE3OXi1g35>x)1RwyT1mRrKBAk|fI` z+D(pOVtp{$zGEg>Wch0sH#zG~51?IUC3ZROIL|xtt~{^2E+%$AQRQ`EY}dB_N*D>I zMl;y5v9qE=3o+(CoB+47vPB{~Fcv-z0b)8Tja=i%XJ|{`n}qCG0L;N=U9RkL@t?>H zfFw|{J?Up;zCaP3_o`%C=%UrEfVbvkMT!rirxZ4V>sa{nuFLoFZSn#0kzv*J)slQ+ zaqALKr{(pq^1#%M4!kRltuk0<@Q41NZdt*Dk=%p^W3l&d71*V?z{NfM^j1OY7vP5!}R&w;T_E+~&Iq(aGEvx(a%jCi4eQ3G3!|4Cp0PxL+ z49B)*#{D%#9GB2&9?;Rx#wesLXb+QvCQMw`jGJ(Jjmc~iF?#{s+l-SkYG z@12Q^&QEjO^{mrGD|s-zWVh#=Fv{n2!B-2q8G1CbOy@}PqnKdT7}`lJ3}cibD<(PM zn)P!k1tYZ9Tj0PgF==5H_~<|Aqr{*|zMBtWm&;?YMwoO@c!u#@(X%pqYHk8tJ|Kc! zHx#bj6YQ*WwW%ibvmXQ24+wbc$%BqqBLr^=w!bbkyFSKe*37b%Adx90gvp|E#uvU5 z53W&8Z`N(zEAUwC6NCLVs@k*8od6fkLM(!4XbPiV3<+0c_{!VGpad=%x80NLfKA4~ zA6Z^R(t4w`uoDU{Gw4)tEb>T|>1+%7A)*Otag3!!M{CPfG%vKU7)nen-{?naMSG~{ ze8H6Bg+2byu<0&h1<^bRP)vG*H)R9_<6N zZCA{bWe^i9_R&9EWm?HSzMnftH3#QxzU*A6n4=of z*sKt>QjK`}A1Rdq1)(_gFfuSKh7(o)t9|_Sdmsi-EQ~Vzmn}L~Nmi7ez3d;xqX01s zCe3QwIyR8RlWaM7wh-E-nvh>&d{sr}`XNHU8s?+jW z%oH7{fGHths!pjj#EesH*Lj^c8P4l+4cI7tVuWF(9z~vo%$TI0CsRja%X@nj3Y|FC zy5wQSP_`dsyG9cLWMa42!nvWdXyL$C`fQ1f9yRuhS(ck^j9(OysRy~CIJCEc!VmY!a&$%M}X8hJtZt zl>7hNuHUUP)pklhu!sK=88s0V($eM@2{6iwba|Pk7if3Nwb9j$W!n``y9nY(mO{xx zj@#YVA+hM;=O(Fugrz^#;O8+z%B)QC`YXxVvp4b;qi6UQ{4n*Ctw)p!;*QQ8al9f? z?|Nu`Tf%N(y^*3(*up;@N#Fy><$PsOMcj202euzTOJXJLQ+)qEN347DFO4{AmCNUD zAv1^LB&kOwO58@W?RfUgjQPqBNwb+c7N*Pje1C+iYp+daQAlww~ zEzlDE?N8g8Wyk%1W%&Vg!C7cL~=wxjHln?#GH~W(6NUGxEf&$v4 zSg;&N>5A-DZWd%^Q@4T(`}%T!d)Nargnm}9un#J+#Kt3^Sc+59M9^h^%_Z~LkxiEy zN==FC!>H8r^@@mx!JZVZ4ikD<<>*`J*r4dO)=4^zt1gn@U;x)S(YJpZQQNiT6xZe| z;k0@P{<(dHN~vZ_TAtR%Q2%&D@+$MXtQL%x?4#M2QXVgB{`Y9#;G)aHV9qX&k4YJi z4ml|rm!D5Zy>S2V_Tw8-%fL@P&&Kn0eW20gj!pdW3*g}~4d#}K{<&h8>*Sxk&7ED?#_0L;q`Vi2bU>XswAZuWK* z8wa}VgmS6}|A1^+uu807maDJ*IhW~5laNfO^B5HNaIMne!x2X zY1Yl*1arKazAaY?H2M0aQzxPG%`$>Ocgu)`ZK6SfGO{rP=%)tC6FQw!DLe);(?O!= z$t#Edc7XR<+ zRq3bfW*nQC4>JSLJ&dCcxC$a)LG%Bj`N`t8JgZ>^qi7u(b50bw1!J{f)hgBHB>M%& z>I-LUr?j3_wqo4qKuwHn!uB@zkQf_It-6RMP@I3kxOyrmihwo%6@UdhD5}5NYPc zH3nO0D#Ivdf~pKuW5Kj3p_g;K5JgHRaYG)^Yz){(SeuU~wRpvV}*Ev7Rz-L@}+mSlZ%H52vzga*DccBBPFQYs86Z=^~E!W0-JcegN{w!gB6zT5CnG$35it%E~HEY+{ux ze2{P~S0$#9%KkiA)xoBZsv%!Y&YR)=%l(09v6riNy8P!H`gqWIH}T>NDq)$=I08E< zHaHp$H5K2i7>P`f2Tc~>FEIP(_9tAgnOF!q_4)}%_ZO&A3CbZJe*eJaHx^7mc829` zzm3REVJ@~XTVTV0_uqzLWfXUaln_tj=nY@j;AlP9O@vZO*I5wOEG$Ena|Ecfx>!tV z8ck@Ny)1!_eX>f?AXPJ=;@3O6n9c7q(Du@QG%8lc33c{C=E({9bLoXwQ`1XG_pxal)}NT8B}FQ z_4U>5P3iB=wx*yk)CEuzhrt0S``+K_>9(c~E)F2f+$kv{mxHd2_kjl(p@Genk|JVV z4iKCus<@=p9-wZvXUDtC z=f&*=#L@pZEpgdJEqZXKM-S$l#0V;ujgjIna-_7BYPqR`pRyv`6(6@Z0VXa&8tNGq zyAO->x$4MWv&4ySnn~?)$6eaXlX~P=MB#2;%eh4kO%wVEKrkxF47J$lSiP(hX2~w& zN{ua6i%|*FazKI!bUMe;dR#HlfVz#gdEUYK``jQHM_M9J`dOzs3G(6uY~lrXCrxsg zO`{t}zoOGI8Riz!d3!um0JBN|c_~i01*OEjfb`t-rfBryiFYVDDh#X)Q)JqosQ{%SBI}m z-p=!i*|LVX{MoXsLp<*9U{;UdiJ^csixnXR0_}auy03&B?g#uUr|ULzZPS0>)9|~1 zHaWY55b+MsQA{kYi-&^BxrVrVIU5Ys{^lW(;n%A~MMlGeiA%R|lJ90oWT~*IY~o&% ze;>WfNqMeLOQ=5*u0A|BtaAL0(2J%`c4S7NHm8knl79 z5xC;Ax0md9{JX+m6ZdPMt3vgO`LL>Bs&5Dda~JlF$4l+EE+jZ{s{%zZlmN6Xk(2PJpWB`0Z-age0G3AZz=_z&j{IO! zQBP04-s_GCzx+%;dMLs3nB&R=&?9%bO^h^sD)a_bDs))6vhCvvk#BC49SuEgW9<*> zMM7s1&{0Bp`J{dvV`8Ud-y4o*cR%nry{=yoa1lJmLKrvwywluJ1IHS4_e>jDUuLH) zJDAHWW2Y2PR)V4#dv4jM?FA%xQBy&5CSeptYf(v%vEy|4#72trI{dPceqB5E+E|7V zs}qBZgEh0U379VuB&tAhN$fAUk#qIr-;c#-8`x#`F!Wh5*_2EiowLR5LO*^mIjfgI+^lSq2O?kqDy}rU}soNq~AhB6*&N(BgB*PhV8{ zZ_f5O&f|5_=&v~6O(XEwc;^Q%WFVp?_p5B~X2LP5j$){Yx-Ze>#IJM+>m$@F-E7C< z`PO$&QPJ3yY7sDv59p`>5L20ybckG@zIV0~-F)^+-t1%iWum-px@608UPKE_Z0mg@ zl<)lN>qqYgKGXj^*KcIw#-n1w#9U%fiUch*7QZ-vYX-i-KQMS$x5h->Z@IGBV*gNo~^JWc8ljCzUyv6h6{GnaqrhWY6C318){v=E0&7BcKC%t{a z>Y3C8GIwHwFv7>KUG(KMMpstb`U)6;t%^S(zth`Wy5;dgDI~HAT=RSehY(Q8o5DHR zFD@@{9Dt18(QPg*70FYg{B#y@e|)5@gCM_OIVf&@H=Q?p#}z}s?eUjk?UrYH!A;~C zwQ;$UX9pEKXqd>J1;xEKu3O*T(iXnWVO`BoG}f}l^X?f&R-2rSLS%d5c86F6z#0bS zgzpbfdAT2AJ~Z{Vp{KU@z783JTwvwwE`>4b2(N|=w~O-hEzdbBRZgaq;zR5c{U_-t z*?u64gwrOef;?Uh+v!HFiY!(<7r3@757u22{ZetmOCW z;L<7N=~$-csuv2ld=|vK^pc~bs{<(W5bcRj38-#Ad8YsXDs~X@X#u3TOf-VUZyUfu zZ$*m^s|ZEj1Uw7==0n2#z`Q&8W0-z^xY!e*Y?XYPo-t`15dotL_D2Y87tvo%6w)k$ z?W`~o57qr{-B!=*BYAhAj5gBd8oG3MKf|LN;c8AHPg`-!g3Pj%Gdj_JUHlK~>5$b! zqJ+nZtE=@7QSX>wFLRLrOc$Mdo%E;E1ExCVHVN6`x<~q(Y(6GX%t@Br_`+w7R;J`8ho2sK*I19k(%Z zuqjqaWwtI+2&|ho@@0v@y`HHsgkQSm5>w^$U>Ve{}}gy(o!11FSZ-fc}e6SLn@S|~!wF!^Ah z#A0|3iUme-D>~+>|6K2d5Vopff_n1cEeYuk`v;wIGBh*YZE1S%^zAE7&(l%9_p&vaW^`H4>rKKS=v);~`fcJ%f89c#H0Yk4pwC|UOUmJ8I;@08t+OMmfrKHzr zCKRR#C%K;?bbGitnCb89y*+mV4m}U)vF$StKmeb}tHvISR~|i>JV%Wly-E$N@@NAW zNLFFWQ>@OL@DS6rH4U9jGgqGmS8Y!5Fo~b9Js};*DuPb@VgvQY7JNs$NAl~YIfl9> z%!^#%G6T|Fg}ph~F3IOjq)Z9E%jpiKr!vorDCcS=tqNS=td3a56-=qqBr;Pjc!uBq zEcK&EFhhgfClhS<&$`*qB2l?RV0>Ol#5g(w!Cl_$5~(tFc- z#x?gXZFsaf`QRb34+%A5UN_FdkQ7uQ5%l1^F3Q>}vd?0G_sE1ldl0zV<*qcuh!Q{OPmzlQw zGigMqlFhhnK?{{eqf4S#ck(7W)VHAfcEWX(Hw-T`-?tizWWRa1+)d!hRKPk+F;LVS zSyx! zarl@a`PCHrMC{!aLHBnIes#6u<(2*<@8VsX@VQO(BE@o@(Yg#Vt|N061B!?|zQivi zB&k+=Cwr3+)@+RCdBfACQ!ylAi!@!91|vj8t3~UDK1Y^oDl0)U<*-Ex2E*Q=-*`~) zt}pknzYOkA4rx(c20NiGFbxkmdtXsC^Ew9}Hddrr_OG_pYqz|!Kj!F52p2-*u>r#9 zSmo!qWRInaKjaa_@EfG8o3Q5v;7E!xrXFs_7Sxa2eJ#r(zh7C##_Hcx?H5>ieXYB> zBO(@7S;4dgKm58~$miuac{=ezZ=R`^X7rSszb`%hMjQWd1zvkV=S;Dq`uiFIwGkv3 z=V-cU#kRJq&(SQdRyLHz;>ToDV(x?%R20npqibWrlLn^r?K?qIpe!+Ry(zf#pQ$b- zD&X6m3S9s{rFcmorND>AoynGOf8YqRc+vUe6Ol&?xQ)X(KTh^D^VCGzfn~S-%786> z0~z!w3&n@Cu4x0tf-~R3t6qv%pa3?hzn{wluK#qOFSq7!O}=Ucd? z7|LWeKJ1tYRZm>er_xHcwVK87ZT$LKjo9B(e|TQRey!}gIsqpKV`)*FtCuJ^r| zNPc&wnPVS{=9xWC_RK{Fi9NUn4T{PFGWp-hBOcl8_;J7FW~u7i$4n1$V#URAk)<*> zyQ}DjX}|Vvd6bzCBN^E%NSexAk-|vej}jNj*yq^Wy>MH3>Q)XU*stZ4RRYe7W`v>F zRZ?$E-bp&ArDJ%coNWdUreE>DH=ej`A#-+Os~HiUh~~T`6TRT9zvOZga{9+sRwWOZ zWtWVJ4v&*Lye{k^hy?2=Z>o^llHutdGI1kxG+y?H4fmE}>YVG^$9+7uk4GMC*rp;o zc|EwWFN4T}5fd|fgf>x+tTYD51>8VRnxbe4k!{Bstv{lqVN1Ph&T;T{Q z86QhtCkQ5Us%oXFlcX#e0|~$SCq`F91aKZtLcfEfzvk7Z7MugB@N#Na*4mx{m+j%E z^qkj*K$_9U)mAbDi z%nI>gLe7_ANi$;OuEtZN7!}S%?>D5Nm_j}%^BX}2FBWK?ES9-T!{iLr_AHAKSx#T7 zfJAi8>{mp>mo4u|8#pyTG$l-)yKY|@5zF{)Mc}&%;0_Cf#-VL$3h_M_HMfXqhr8ey z#%dZGKePyIoEf zX>cU4F(^U>^OZ7BvH6S)Inf0k{=8F<^|Xc&Zufm)VYH=Z#a=9zD01@soO!Rt`yE0` z4*d*m3QjhOVFXbMu!JxWhML2Q%=&7i&-V(S$+cpZz(#0&s=J$pa%gPojX)Z`IAg!s z>i)gGjd&!XFS%Kr|FL-8DnR!`vDrx={P#w=t*@hszl>NJKyobJYQ=tYeW`5z^7jhf+!M<61j%iJ_cpRjn4FM)DoTsLRxg>}MJmKRvKGrYwi1Y=8;k0! z`rW1y(6@4h{1}TR0 zOg;MA^?3OL9i5}@ZZP)|1Op_lp}DGo5)e+k0=SfZ+-c(w0;6ImF|$?tOaTE9&@c=8rQ6 zj!7PJR3wsxHqYtSPYN@^dmDM-pZ$)sQeZJ z#UQ4B+9Fd{LC!*6<2*Rp($(wP5$aB6EuYeZ^YUA>j z$^6_!ZOZL}S?ADO)jHmvV1X+Jn?$Wd(jIbAI5Fyp*@nX_`}(!OSrK*F<`ee^gGK~c z>i<*j2~ihwN*oEF{R7Ba0)>L;wMJVz)7g}z%D2rtD>95*Q9$I2a>h?c%E$b*y zxpU^K-_QNY13O_9__|to)9dvLpavlG&%8jAFEu#7erve51+4fG*VwZU^%pVcaA!{5HB8SeV?Mzox$lt7g}n`28^9 z&9l3UARP34R5~)CRS5;cvj0LeZ<3m%ILKwr<@S~4*vBX3nOfUBP?`5)P=|osrwZr@ zpSM_vVtg`%tPDZC+a{!wH{|x#Kk6`^P@1*fzhCxb=@{w1W8U$VRPy3Zj&Rd_!oaoV z<*2J{YBGIyYm;$y3-e|J}018B(UW=&%ozqsz&Qk=L*^{_C# z9znyHYd&n(acP>dTx_r+p3YnP+th@J_j*s2BS;HaLEqyiZM^E6r4@gIyMDUsLPWL? z%Du|ZyMkmlNsAXNND#h9`|rDi<(Mb`kEm}9uWRetZp_BEZQFL!*tTtBr)_MTO=H`3 z(s0MN8tdEVc~8&xBR_Lpd#yRwoa4s0M=(^9yMck=^!M&-P6eF_{0aQ9f%RGYfIo{5 zEgo-da8S5g8)Ex1N6W$;-#JYsboB7_7$17AqS0MOQ?+uWO=&H?2b^WUHb+ItN@Ja^ zKIB7Y&2+O-iQ7RcilJD^w$K>-{(*9Fapt=JZ0{lUIdq$@m+>6i*C0 z;JV73Nl9KzZ0gEuUN!R;n9iQ1tw*JmDi5cAqzVqVZ{Gl_sQzJta?)rBJo{Bmysd-l z*YOHz_p8f%fU_^@hrjV(qICkc>+am&)xv)D$!=g8%UESIT*oZRg8 zIfMwf>UVUVxhNpr=IayOPKZ;BZ##pGR>(0a& z9f%0RO*5t4cO?%gFWA?w|M!uVYTMGG&DqzDy<9H`idt*`37r-Ryv#e zv(MMgV(+hKL^%?;0eHI}0~fsxSjHJX6(9rDSQEk^Z<2W@}At zuZc>Bt!sB2pDZL?elCs%S(tnbRa|wcv8?9wXBJ-4~R2sBE-_+-P`EJ^pI{|(elQ0tD-j3!MbaxM%WwC zhUI(GiYLDxV{3QybBYZ{>)QgH_Y72Nmpf+#FLbmt=0Ncay)kEk<7A!7=*u56Qt4xf z<~Z56_??1+&EGC-18X8R;yS=E!(z-n%R%J#w>Mpmvq=~&G(D2I#Gw%byC#2y`p=mR zNZ_o&mS-uUCxqogChS*6Wo|Qtv7oa`pP{~%^`xKu%9X!rIYbk5E$9gcaWu?GvsIZE z9=Za#<)zDtwSTw17=d^wilmjQ^q+6P!%4BZxOiIX#WCquo5)-9Sr4A5_k_NU>ZSKh zqa48)H?M={us#Y_EH!&s+%;;8C#m_j5aqaxqW56)6yzO3O#zqm_!N-R)4{^tsfK?~ z15F7Cjd(9DxD<hf;(4GdWc$D zSWvkxVpgU%`_Vb_^u<_u6&5J2==I68+iJ)kWlzBDH zsstgS|DEsx2e7wRHS@}Du@w#W-;EgtGU|0LmxT%9fiA8ta^3(_?VeoMyYMf&YQH}b z;yAuODwpx?|F-OolF7!uE-j_G#)vh}p0rKa4S9X!!Ym@T;Jb#&`jaVmgiV8t3Ai=H zoYqFjRMYWkg2fi0U||(Q&rK!{F-}3jC81M8^mcYl#^&nII=mIhd70OZ$m}(!pH`~R zgvs(Lm_@zZc%}_}wG8Y@woQfW7fI!#3$K#rp#7p5Y(|T0m(6wgxKOXC{xX3q9OyBe zZT`#4;ucZ9pVR@anZrIg;rLmZ5qIo+%iryr74#KT!gU6N0$aJb$=tbRYW10~`4UK# zj&3qyZl`*~BkTw;9F%NZV6FV2yLMUce{cS0rTS3BMU|Vw{Yf=v=q$!`CAx~6JWUS6 z`zpsPyWYS>57FHpy6>4+30lpcc8e8^^1kPgDQ5C*4zdMdhi@{a?2oI%oS8tyRGlah z3rutzTG~OXw3TJ413ObaFHf#8GTf1u^%Jj9_d6Yb`x?Or(I`4m5_i={obda7Ze4RX zLUKZpI7L2P8T6bPMj|Y$ltiBW+aV7Oib_*Tik6|il&XPz)Sm*SQgHciLm<-af9KSE z%(Gu-jLDy3+C^?b`W3vD>|&2d%_W%Ss(QhTE3H|#tpZ;3J(M3C9`-JTeqD-w?;b#% zlj9^-;)jZ6t(-M68Mp6F)(`qqzzz_9ufGUg{Q8?XuBQ^|W(vGGzGr zxY#9Bo5e@q5TBh4mfagfcfkE=$BE(2Q1+=6V?+61$n84}s8u6b9%#@N3t3DlN?5bi zkWh!9=On;^OVYBxU zE$<0RSpWMk29$u9Y9N8&4Z!@TFY(Xfu#aWC;uv~%#qx$W%k~bS`;p9(- zF#fai?{>}z5`dYt{b_5*LD=5heB2h1hZ*ySQbh9Xl_3n}%8cSvB?>_0u>Kx|44R3! z`2A1@4em=lXN$Tk9Aco#MH0@RC@M;F$ZQHuyqS$>l6`|kpjg53)67s=cGs;b*;0Jb$FxDPyo2b}H}qP_d|eQK8H zb;BUl7M}@QAp#wyqX^grW~NsRUIUevsH5ao2Nv@z*_aS=IYZiucTpH!Z>{Vw6eRw- zS#lB+A~*gLMx&AbvgBFo0x+3T3z-~xfd_ci)g4oB>x4SEx6+#Lgqn^(BV+S)q~NLJ z1XKtkM*LIytTjE-V(7w)L~g>?N{6|^c?3e_&Mj66DM@|o|KkJt5@Wvw;a&`x2yVST z;}y=Py){V|Bs~A@(m+HIVij}X!EQX0MnQZKbg=tKy6n88ejPguOib?OP1xgQ>1<1{ z*PM#x<1&P&5>O#g_W}=dWRs{%OMeX1TAJ=YL8k@R0v}QG-?$T6{Sp^&|9f!ou;p>m z5;d>bc$ZrKb$IhbAB|A)L}t->=8VKpmc`1$#SD_y?K-jZ>6E$}e}+YByQgEJP0>kQMTPTt zjK@LZSw1O_Sf3=TeAtZ(^S_5wso2pc8HZAj(=rL(`nHMfqoB3+7a2gSK*^sUuZZ6> zQL^$lW%?#%DfE!aupl&>1IG+skB}dSGy_7}e~)_;P3W=sx;>Bj$?9&8_Lr1$4738X z5ZEluU|B$(OXM_?y{w6|@8fm{(n|q>WzO4;hqFsrDG*f~0kO8+RW+NyeWeE>&kG<0 zCBVH%l{8)jYT$U4Rs9!F`B^>aX8Z>Udhy9*z%au{ZIO&>#c&=jap6Skc&w#VR9Va0 zY+Irv@G@W`r`dL8Fu|3hT||1FzdqhHMQ9*fL`b%XT+)p{tP<;*ZVvaN zx*9&+nwadskktQ#%T`c;eC;>;I)&t}&0`%n3;sn+n1NH}_9VUfdMv$q)+Lu%|HZV+ z^?`o@L2jO?rallkitx9J=;zcgL>zmBGApJa-RU1T^NJ(Pa1NR9j~+wu0f7G$ROVJz z)pd6&u6f9)r>Zt71OB9}U%*Rbg~>>(_a0pZRiK%`cK9E+BmTtfdfj2J$I#68Jb@np z9+9QH&eGxLP+x{)@i@Q;ze)4lce?c%@Z}ty3L^{ok}3xzPoC`yLPF-7q)*%Xha+^q z!?V&nAYFil>zP+=_~njsZ;~RBGBIokQI%Pw4*geN9BUCvTHi2ud~(z^0jy;Ik_RrY zOukLzS1wWiaC!;EEJFdO#ohH#AfPGdmk43Ak@kCu7A~^J@46Y|*80h0R?fkFYIQG4 zw#18>!*Trb1>C(!mxzHJJy$ShO1UQ?rCit0(QF&KLM#rjordpaR2-0!%=am3lJan{ z-tb^7{6Xt^w7I3xHEMnKb7k)3*M@)emw%wG0H=wxlO93snU`&j4AS?0QcEtbR!^RT znaWhLaAhiwqV5Xfn@5>nvK~QJed;noWJoqZsn;Xw&HPieO|Nsu8X+y8s}NzK!#s5_ zGWSd8>yyNy9}1;wVNb+qW_Er`3{Pi~UwI}V6evHjB3DFzyBl5 z)YA%#o^;IGUSAX5YIl4S`UQj3j%s0_qLkohpep!xeJNDkQIF-931s{eJ7}zyYPEam zZ4p3%5Onh?<7yJl0O<~6O64VTT1z-DRYd;&XJnRV(&*JslWKHQ#5=zZe_oNLg)-_7 z?(sS5wT^bqDhAyB3{16z&K(BhtV2mogIFJhhyq&&ntu>nJ?phcV)*;;J;vQSO@s!K zr?*`3jz4p4{*h@!*U8Bgl8)C7MQ(9rIs#XV=)mu~O7Ii>Yy-&BEV2 z{pF=y&vA%hk+b~t6S+-K+b*j1F{L+)YWDZ5XI?5c%j$g|Rwh=5AtS=(OaGp=OMiqM zYi<2y6IweI@nqjX1s8%9ONg0IIZhq9xe0OPo$8Y3eq8s<)ZMlh)PPJ4%l#*Vdo^o&+=k zQov4REtjV;BbKeR11w_ThGZL(GkMvc0H|SzG%}9>tkwQ+I9O%awyU#D!hSEv-VdFi zsU?etkI&cvp$PQMiE}7$q{#UkBjVm-%sEs;Q2yy_f6$)u7#y~@pG&caZq04_ZQ`eM zKlqe}Ngu3{v*nip5EqSp$j*f{qoDC->aw#>0;nq(cq{G^!u!6;wRUKLxCmI)F?M4U zSgq6=rrM^4iNRlrMb>4(Wg*2#nEiu?di~#kPq=%OkMQoxMb^3k1S-{M^AX4`eutm| zWXe^B_#vc zY!W4`=T2nZ+S(SK`~G;iX9-iGy%3TG#|+51C6QVqB3sR$n=Nt9aUu@a^}W2d6n>x9 z6Y$K&X7-D+OwFad-=U(E6rlEYNwJ*a{)tc@#Sq>neI}f(AL|}!h01}_Z~(kPBgB4u zwk3R7Cv>JATcpt92QrC+m@XPqNh_1DlS?u?B^#0Dgy zzK{LNmItx8~MW&cm(KlhqzkN^prL z&8fgL--23E%&;KeW0(z#BflF7dGY#Y6yf6ft`BP{*g$y=I~(Ct~ylnK5F{ zB;wyCb4MBzRusrlj$kQ_Is|4Zo$n?M9hABgGQDKkg3(!%Ut~45&bd4jv zON!75Iptw)`iy$&OQ?dvax8*3gR0}sVI54|^-+5E!ZmHzIk32TtEcCkJ`e;*X!A3E zZ>h?3lw!us>FaOa9XK+%@zFTigi*6e(5ytpTK0Q~n#x|;i{0Sa>l{x7;6>S_MLQ{W zHeD0Edj(P!+qM7wl}T2Yj7B##EPfVe#k8m#Fq4N(T&=C^&NZ9&pUI^I53XVC>VJ-q zLUM!&>AK^!LlgMTz=VON@_KTDk={MP0eJP7r5pCwe{Sxt%M0(F9o+iu|8~3qed=1# zhcjBHMAq#wIwyJtdolO>QJ}3FL;4qWes zZ!|e^BOqb&CszJcJz8uRRp9kkjdFu4Fd&lvlU>QSclSrw9Q{RQ0jKlKZsh8Qhw z6RCV5C^iYd>m@S`fU8>f&P8_El;!}BDBQvni}uyL*ZQka>F5aBC^H0byeop2caNNI zY&nxYBsMTk4@K-34@~NQcKejiJf6$LENGAqA@@lN+%cMdV}%1{gb24l@{ zdvZ9v2nu(+yw4&dD=5wYs<+QNiWF~>x_k%)zS7tmr%$N)f^Za~*l_;DVZ17$p`^}X z$WnUsFM7VWFhx@>Er0knA9oCmTXihlt+V%Q;sb*Q{Y?1NC&LN%<}EBbD_?3|8C_#JwwWr5pI+0^3R^ z#`s07>sAAldN(_?yhA%gvW7)7Eo<^1)n=Ug?t@zt@&7m~foSlH^0E3#<= zz3uEw;VtRQH`+BA%^)ndtcS?R@*01Yvp+9lV;nhu^?axnes}fyuBM(Hqx=W6+t!_$ z;efFDnq|a<-j?$gw{vLxLe|Vo>?@o27}RV^AVGYP4GAA$8r%t+6i#_UWnh#SXPhWI zIv(S3_Qf+wRUCiWzWJ$d{Gr@@WNwE|K2&{zd`J6rueUB_ZLiisc|*8vZ!(4;ig^6y zNj&zk-?w|u)UWue%+PoxOytGY00t+_z3WdOH;*&k*8-Y|-{Q@VP*O}pOr((Q;=VP&GxcQ`ACU{XvWmfI zLzJzElY+7U)`WL0QQ!3~%Jvr)W?w@5D##L7mLw6)q|xF3;@jc68yS~`FfGu()ODpe z6}E(u)N3Rn`PmG+ox#mQb7SB5v%!WuZh91!bd7Qi@g9JpuCYrx~hCD}QWXfj12=>W1f=M(G4%YS7N({`d_-^~P;q)T%+jm0`G zih$71q*{U$-rz-a9c0!o4wr;iiL*%9ZBQCZDL4ao@{Effi0bt%{jAQ2y<%btuJ^le zJ?ph@GYG_m70?ZnLWN(X5h277DZXs9yT{`5U)EYoqnhlUEqZHcE|$9kxW(c~r-g6P ze%|3lNf?P-ym&i}-YQ^aBSd7A*axCnfFDqJi!;{{&2X_jusa~XYi-wdO#pjj0bBq` zU}PCBLhV7LWkC4)I&zEiB~r=a!>yoG2ye#k^he;QC@AAvmLLuN=zGN$2lI zPB@CF>Z)vQ*Es6tEP%56PIU?nn!*F2$aS!bsk^sk)L5@l8Eh@XjXf5>6fN|Aarjc`B0_iE@{mR;yb5F1Zxg9)~t4AXsSoQ z-pV1wTQ^NY*6JmB8K3h8yxDdScE9vDThIAtEU1QyzEC6M0<~M^=PRB6_XaTu!8C4(p`2hknB(OfXin7Eh2IekkU?w)R5<)Pt^2CUlCeF z&ys_S?I^Zr_s=pzd?TT)V8|h5uzJYY09Nq8djGDw14fg|+C2&4o3U2rTlwn1Y(54O zqT>XWK}j3^f?UJ}n65m$XFM5^4s5mzC}o%dc)O|)*@FdqzDy^p z?4UPSXBj(jPN0z@%8a&nJ4SlgHCQ$+>u8ff)_DBD3o9$bcTipw!D~#Dln69%Q>uJw zpq6rCRY1PQ3;(n_eIFH{lqU}pSLYq9dYfoV?m*Nfooqyf>=%#C+%+WEC>jSQ z^C^4J9FpP#7vr2gi0&zf?+U4`hXTJ_kzL>*EXoUMPc#Ku=e;0@DLQlyec95Y61x;H z58n3mWa(XK)8|n5YWLI;g~N#U%kQ|kvpbOL@PCHMd2$ysrM;{%h2dE?uHG-r8^)6^ zC=S|C+Ad-QTgE;2M{x%Sib!qlQgkR3!_zbg;Ae{Fm?(C|Xhr%m# zc}mnU<)6$>i&iHPZ&`iYCg0!MA8`n^-p*j2 z;?8vCES>`}khnD*TI7h(X%uLM2FHI+89+9r%)*Kzvl02IXl1yK7q~F;PP>9c?#M9R zy}ngVuj>{54$lYw)e>VKy&`#-dIsWzYMG=bzQ5jBp75ze1KCadFAu%yVn-^!WN3{x zNS%8`<^IW3>b zmZzlYS(N022kVVBUB-U@nhu*5el^4O z_?A5N4Pl;9Nqn#wx@EtZAx=Bf{FxF5I^sZuah4qpYvwx7Y3ny@mTsH0Jr{O$%0I;4 zVOBXx=2_7oZz16c8OdVEtZF)%Tx3pXj=0(jv62N+Y2Akme##&c5CQjM1D!&R^+-#Wu^rxSJ_+}!;f2#JDjaS#@W?e~RWEk3D zihFh(0(@(C#DVvC<_U-IVz2a%7SwcT$5V+YcT8Y_w z5B8)#0r$5Qt&KY{?dRPsdYZ*aylEOH4(3gphc?H^HVUD@krW9x>NCM+iS}~)F&lqP zR3Mi`%Ke~&)aHApWn^lejp-OA1Wk}Ek+vrdWc@NhPQ}U}H#?zyE>t2cK+H>ErQx#> z(Vqx4uV<8fq!QkSpVJ{-@{qidB5)c?x0og}|G~LH6Zd0=ux>4&r+36!k{1@U-Pacg z>>6Hw6Oa2gm`U$_BqFQAS6`g zdn?B1-|mrcLy?9>d~AXxxmN$c78WxOJlFj(%#3kchvO&P-ejw zIy~Y;I%$0rNTeC0&!V9WJUXB87{06W_&#wu^(4{ z#~TAETW~-f3lx(*e8UfVH{rHH-{uPx81ac0svZz(!=U*W9EfdWS9=pZ0)x5S2XIuv zGCdvGSKG(yEt|CrbqlTWJ8; z45A9!vG5V&v}S$A*ke)5Xvy+JkobZ8r7ec6}cE+w7qma0pIu(CI zZQljH?Y3ua@*tN;9A};qHiU+6gKs{razFMB9ion!yJD(4`ZA{B#}p=xc z2?XeEP1sjGRnizOXDxfnY;U`TDrOv(XjmyjR-ovu=m|{M7*KM?Yr&OelO!Pgd#I^A zhJVZ6g+?R`f$aUP!wuUv<)z@eOJ%th!)|-J&`+7+p^zlIoGz*ClzWfhzlgm!_~jBN znyf4|%A!7$u4c0d*Z~4Z*@Q?11)&*JSyT3OZYG#2>`3jb>KLjr4XX#P9OaiTlnX3W z+noL%ado*v0E_uB4RS7yjgANM0I!#52DN8zkrrdc;W4N1OrK;=rguo$;4xd1ucXme zH@D2U;RuF(rfGL?6U`YsEBwCid&JDqne^XH={#-(sA1@ksmm^(becA#34>*6H_(fG zIT5`sUg_;F4fj{qA7+B5KG)FwLy`XThXJ4aZ6;XY&^*UX>aZ0|H*_ce;Jsyg>ws|x z`fzaxCk*}}W=v!f)h=WGS~aPEqF@{@#qtgisuuhL!>HNhSPyb;Xn`|f5-Od9e(0fD zG*~N$pg1dpjpf_8z?&b?r8;@?$(y0`O7i6+5E|^~*ZevhdQ!txLz&rl=1FDJ&~aTR zxT1D^XZ_fZ43w(**4FI~6II>y?*4wjylI|~M`l1O+Y1^bXy$Jp+Sm)99MNS+J@b>M z=47w)u--K8X`jzJafc`BX(3*~c#R}hy~1lBn2PJp5A5|G+HQTW&q1vR?=;9?|@rSXr7 zaL(c8eOp8T3JPqkuD1hMg!5*DY{RDh0sVAFDfQGBN+{x-_~2I5Wy-*17u=+W_fOtf zvC8^=Hq}Q%oi!+w@rSK@l`~nI~&v={(-=3m-;jZkEEwizqJf zQJ9)LgRHlQyv?9^Kc=nSfw3L<>dsgAX-A=HmFAIbLEgk9fjg`4mY-}+lWJeI z$ZIo>2x8J};(m%rael_Ws=l^Eq6e3lh^>rFG|Vjbe0<(Q3KkO$Tz`$MR?1{DI{O6( zTrqyR3X)1vg4j`#aJnr1=FR1eGR@1@oSq&=!_}CR(ptgVZ?2)4B7X#~j{Tg#I$e4V z&|v9MJ}-x%dLqLvEewq#j-<=PAb1vPA(s$vkzG+R>PN5udqYI)6kBivP&#GEMdy|=ePqd%STFZi@uIZ@hJ=wu( z-xXI~GTta)B}2PP8pHqk-~Em%S9+-^{Z^Qr7p8ZS#3H7?J-W;*VCH8(vHgs9$i1Yk zr&lD)m~qA)=&qx(0AYV30-=Vx~_FCDr=N>b4ZIpe>|&q;5dL5qG)xXy=} zVci{bZ!(;o+nLBX8y(K2s(WE;U@*So$A^rP`k-wE$K^2g7Q6y~fKfsCXh%zhiV*>Hv# zt79OnDmmoD^L-9X)>sb1Dcf)n*@a z*aE-lWGcG#CBSx~D*xxF11&aK)L2fs;QoWS@#f2!q8Q65JJvGtWY4lE%eFfa$!kb7 zn>HL!Ky;?v{Oynm#Q4V~U)X9}Q2e%FL*wcY;YN{5y}|NVIMZ$&+1&eWAPwubh@-9zOEc zB8n=SArdvb#*_(+h3h4q`n8wXd;(S~pBLQ2Tgj7aJ!>Xc``EB^d8hM%+fIQKB1yh4 zLyd3T*W(fCSI_m`qx92(U>zo|ci^^ntt(&ap1xiRXxj|GOz4cfIf3hDX8Jj`7aa2? z9FjH!^ko(N1?d<8NWHFeugby!#62(2_hl=N(Xx)xY;2UH*Igq*H}pu<2=Mee zJ+e=IA8IPd;(gO4M1W3_c`E@e=q~^#ZC_st@{DcQZvOAt+QQ>|t_U&TC+&KCYuPtp zc7@P+(XV$O&$_D0=-H?}67b37W@Lrqj7Cwz`6MO?PhF7X=jv48GEe0hm>?_H3W-GO z!X!#>4UWoh?)SU*I!}coxUQnBU+Hpv55C9Qq+o%#0p99BN5@~%CCNfZE^k{*0TU*r z*fj@ANnq8TkLnJ zI5nb+VZ@m)guBcQl9(LFRQp|R(T*T#EZQi?F-P)S1=|H;wJnE~L$ppnooDV#DeRi2IDwI!X2=9}I$cJ0{?m#3F3I#Z06hYb4V`h%YH zsYpG$UMgBYm$QX+)S)I9jvGlK1K@~ozmhqXBlLRA9ccpKzNgIW-}6xYYgchFJX+Ih zd*W1Y*(W-A`zg!a#7 zuP3D_aCo``yF5{^cEm3*1a zX4d8wr3Ybag_jNfh^qdCT=ikf-MVDxFwrgIm-24NMZc18^Dgw*gZiu{#9voS>yUci z0KWQS&Yw9f!UiQT&dzUplWota$rs{L#IQ^+()Lw*N~2|Eb3ciGl5Z$4h7Z2YwA8|5 z5V7=LS3~)IjGJ*rADKm)u>e~kDuWX_0I$lv6L|@GEr#!0r#}xL`2+X6Cl@ym!K68- z6!(ift$FMx-=!xv)-h^j5cj@A!_xASVl@5-K&0hPGLOWo6&5V+yB%V*PZ(pux%luf z%d<+XTb&Q-j-4V8o0_x$@p&=2k)_I9WNhvc0P@}v3%DonfKC3L)+8okjoWg_yVZw* zo+3#3coorNy_JoFlXHGICa=m*rS`g?Dk{hX2iet1z~?`4(`8L2Q%+S?o9;%)k&A+~ z{bagPyNucNGq7YpyK%WV2kHU}tHNhu*z6cw_oz@`&&S-4$B#*R=8mD%oEN-LRR!Ze9)4aKjJlRJ)L*5?;CmlWq@|6pgJ*Tfm=%^c;M4rPj)91uB<=GFe*aim&@A4gV#+Vpy^@ zML8SSVJIl7-2X#JmV6*%$`v9i;jkhM#f9W!A#Yg7RVIp#X0B1~LLl%0d|Y&f3Yo;+ zb3x=eR=;>tx1NY3e!#3OCNq&D5@iSMOa3XwZBT_OGhX}d>FXeV;D~Q%?v<_K6JyT0 zU-;fPT@ebB>jrb_5~3{t0``*OR%2@S*uJl00uBV@#WA~ZT=Re5q<{5EyCjS|gd+P&38ctCulHK8TjhRe?4;%r^xBN@o5 z0_HZ6zrN4B`H0@+SzXvK0Z=+D^rIC%F0Fyj%kPuGrKBbWaZ#bV?d@8XPH=C)^c7?Q zb=>S$S04^tFi{L;#$=wuW-cv!BskiK{E4hRDq#v_8ETjrj?6;x5E&2OewW25LCeIt z@?Ie{2u07_Q%~s*-#0{hTlvbN`ZTx;aH6Y#j!Ek{UjOS=peFrEO+s!iALMwG+g~D+ zMqo$eS129S`w8<0Rp2f{V5nox2WE;EIP}Z`zv4mF%#`FH+lvcqoj{ri$q`TiXKx!|?M? zZugU4JBX0bm;G$knwUH)`{gPWwXg(C zltQ?H4nluF)!>zr4)gs_^v6U?`}akoaxmiezR;mPC2WX?2c#zu^hBCGs__0AcD7J5 zA7B2wZ~-U!ELsw=MPaM0uLE*uP|fDwglS2?)ZC7n;hdbcQ~4;6hWc>bPr0!hCqKW0 zu?jg|G%YsBsS{b`z#>o}v=4+oRH(|r&(cN(Umj=tf zIvPNl607jGzB8XfW-_6GW-!NYFgWsZ(^(auQKJhxlj17Z$_TIR%v>pw)!*N>MgvnH zkI$2Seh;+KH?yvZ@F}uIbJhxeGtr-hlt$s8S-QAzdKyw>&}g8^rpJ2@ju&EQ{UoD& z4CRxaGb-fgS@!eWuSvy}RBU4bF~NMKUjhP!iR>OaO8mxL3lo#njmy65>ea2 z2!RGHQ38H_A$puep)Knd>N)k&VJ3PHgcl^4j0A;J_ealU>^c=#K0lL`a03*q9fNSc z>!Cq$ia9WBZ!vO@_)-{q^upSUD8@PkUA=%JQi*;Duhl0o^}%tYeT#QDokA;R?}tmO9~d2F?Z3g z4CIG9R%QENCIiK;5ro!?7I_KO0>-=q`Y=vZK4ZQtE*r(5jF(m(Gjad}F&3$i$R|_< zDp3;=fE{C3&nfdOsLi`$pwj~%3z2YCocL`-QxXTJ2MqxYHiZP2PR>+B(1>{dCVLIo z(Jim}`5;77x{`nHj9 zU(uW<;OcdeIi|i_`0LL8g6Ob8UzCw4BqfVUab&oA=H=d_wty>vu|pnOR|qR*JFL>A zY{^}}?L@`cqW227 zwELe5A^snK`Wl4LgmUW^S0ds~cu4dI{tAv!|FXk3)Xfp%2ULql1$ z(b9XKxn>k|`OC0uQ2i#5+E+ifO+9CW;J7}~=%VFx!Mo;PpE7*7^pjN8n3FLeY9HaK0J0C& zdUyC+jFA3~JKBSOg=tTRYF{8^Je)D*K@ojM@MuRgtD;G z`&T(;&`3?|9*M6Ln<4zG9%?+gwx=Mjlgt62`*GV!pdxJln}3w|j?%cmo94LJDzbUw z3G8Ke{i~`jn`g(@cq-W71zuWSQF^zNBh9~pOCLGn?=UJ(Kc_cU4;6&Byjk>Tgjdu^ zTl89Vjv9`M61aQT(-A6ZJU(#-V{o=IYtya!Z6V?JEwnWln6PlkjH#ez$gFi4SD69wP@Z`<6!}pfz#i6KzDvFHMC@4lD$kF=(Cr{m{lxnp zC>WO=-2fFx<-Z&bQFdMrDbe|GytGQ?pDkyC{vgN#%rB8GP$uey1dROXBs1ofIUFbe*t%cxQE@@~R8i)yQ zmy4^VA&m<_#e5q5j7{y$_f}2knLx?lE>jn9@z+j@0U!HgCF~_>a7s^sK34SXu{Ly^ zi~_|ysQDWd?Df%GR@U+LyCugT=oP${r6#>@|L?kM4{^OHu7i3OpG6II)|i>eQCJmcU}@(x~~+WJ${77g+9qs<&l-!fdkTJ zdx0G#Mqt4sW+5Ubu>s``2{ru3Oc2?(L}&@?ABww;?7}WS=UgD19zM<;8d^H@9K9%7 zOldN;lIo50`ljk!Y<7;{fd&~13JpYvt5(XE03btP78<4%6hhPkE2gVi(FHzP!~j^H z98K-BlZ*FX{gwU8jiz?P@>(7hXhvnl#RF#xnuT3b4Yc55cIJKho!~XSl^%@t;M}Jk2Jv2SYk<_ ziP~^Q9>VQXN`MA-?PR>z#|35Xs3z*Q)cfY1K3vw%a}D@lI?LD(=Mim<%9M-ub+D&g zfsk*D?!_!B*fbgS7No0~TqP4CPj^>e9MUyMXDuWHc!Mz8cjqR zN)for%KkBrD^kN764HENA}0lJPqDZ=*fpE&|1Yy_5i>u3Xy@f;lUua-#W>u5h~ig`F*V`uC}?=739zq zdP{au1BGLl2u=8lxyZnhH^_UjOPGpSDG#qIL9Lcy^L=lL1fpZ2sb0=6gP~!Srq_X9 zu-TWf<$p34;HcdRPda}$xW&>E@$1NOrNf~&4t;^7Jo$v4pEzQ?OYubqoH4k6!O8W7 zi~9m-2K*64szA4O@B?{|-8+C28cphuuu3ehGN_>EU={lG=V?(=4?0=w%XHgBYszGD zgg40Huew`OIwSv#g>e$Y(Xf6{MK4T}zvI4&h8u8vXP9rD)Y39khOS!1GvNKOis`V?848n+rv@8RYT^&&{T|l} z@}r9PFy=ehRaLrpxDqNVQOeD*WOuvri6KD9^4@Z#W6;MZQRqhJ=4h%gdsz5O2>KPNSCPd83-pw|Lyd~2+hiJvoQSeUYwXvvKisI2 zMO2)9&nH;!oC43c$!D@>N3 z=?UmbtBQ61|HdZQn5X%%%6j0vs3fQ45{P(4@xZ<_EIjni~wcdnHLX-?{BRWm1D*FP_%}#;eQ=LGy*o>qID8w5LD07xmKz-HA{$aoE!xLnfUO+C7w81=7!}gOH5ocK!?JW&B(YTDVM30j`O` zLHCB!E9k;(k%zT5gy}$4EP)`IJXN0^dqc}K~oOyZs#{G^~Dv9YtZiTw}_tSiY1Y2b8;bQy=p|(BA9Wc?{ zefLX`?p|w`&G&JVPzQ%?Z>j6m)~?cihVpd$!X>Yq$=^K1?~Kwb;~^@&wyA6EVAbNn z{Kig=#r+v;ct9q%Vk;iGm9V|k_OcqYEA+lO?Dog-eRD!8;&l6v1Hwel}|?lLZG{DLBe`s-*}x8qA{; zHm*lr!uSmXn8qs@!vBTdYY*O@yB81OCH0zL0-C~SkImA%tXXspuwu48Do^SnRh)6Zf@;7k5k-k$i1jl3hjjG zN?Jk?^zw#<3wGEX0a4&6PG@#Yh(Y&C6v_W#U1?nHYzm}ju-k<3X(4Og1Q{Yft?(W% zw~_Ydjr}`zLyNqyrC#8ni`Rr9ZvV=8b3cf5dWwVH_byWC*LS;wUadX zxs}+Mt^oQs!Be<3_<1xAnYToYFEx7in0oPhmDP;(|Bt9|V61G}x;;t9w(XA19ouF{ z9oy{Kw(X8>+qSKaZN1&+e)qom1+`XH%^Ef57-QCU`IXH5PW+)m(Ep-RZgRSIw}E{( znpxcS4=`JZzl5V2IpbV{ShCMOZPVGeHn!@yg-7PwPCS42{QOvOU!Auj*SEsgGWqfL z^mfaGgo+=uE2e znU|_pUJI-_cgbLiCI0aUh?;sD2d#~=)X3?-dnabRm&OZRAW#uYzz3*nKrX*!f`~=s zwH(a}Ee|k)SyV$e33#;h9B03ff39(SvX8@>+EW~F%LTQsig30Cl*F37?87YZ0aYV3ygzush&wu97C( zb@%~Ek4R?B$E<;Yhbas>=G{K+hrgpiA9acz7n&I!-V{q$b&Ku@+8e|Y;P_tcv){ej zdYrS5*!9(}-S$R*;TEZ?gTTHiXo@dBi+`a^;t!Zjw#p{G+(3=zuDIZAt{q+4Ls4Ci zr%kDzG!-_8OkE}2Xw%s;W?n7jN+89mN&pyNZq8C5Vbyir<5hRR%VuxB1H#e;a%N$X z3S#4t`}WZR*{`c|FjbiGzJ9#;N?*2Oa!oAvfhW_rP@O_kf0yPh&aKV5WnHCi2aOM#ojvoJGs-YCA&~`;$ zj?vWXXV_f^t_s##^i3`oP6)8-NEIZ9afDyBll?KKP2$FPsr}7_ii-}rjd)tmEy~vO zgoCU3oqCKU&$a?40RtbpK8Eo4A%v(i)IJ~P&AVp>k;$Cch$(xSn`AF>C`)K}v>>q- z9hmwmK;!A$!Wx2!R}4cDO&d_;kHE0!pmko&qs0mF?s@p3j!ZPWe$1`GEvnYN^#u+i zGq1H|T)wBCqPI)?_NeI9J>?O%*R zzb!;_NsNs0TE<+Yg&Ad7p?HKm0o~zt(xoXKu@4h;C^V@&m%gX{HLi0TU@G{>a=e@t z0ph$7UrT-dpKH@rT|&b`X}WzAnOI-3-J>bl%OVe}Ko+;LLylis6g^Ma6jwSOB7*RV z0M%pZf7W`}7sNG+ZBXTYTv7%LfkH%unuBL+hUi6&*4ZcdxsY z=McS@;`ac(k8L}#Y2}N>!2XeV1{QrkzhxD${6WggF%JjQFjTaB+(xbp*a&Tn?OccJ zD&Yk))|~ZWpQ+Q&rIdNu^oIn4eSxGUw-=!BR^8|1>Skl;7@9Uum-u^5iniCXX^=!F zyKz}rLu8BN7kgG?OJSG2%@k<|)PKbXRGun{88pouEbPl1s~YPge)}5$>=Wq>zAhI= zB*6lM%K@T|_U=h}?{}B%AQTFV<9jH+5f)jTNDR_e*=2Df-v+<2L{W^FhmmJG-927qQ1M$B$Jc(uMVRJh<-HJI70r`WHk-KW49C7r6;X zaY~cnpGgEc`1mZCYVGc!c7Csv-1MgqGVSvfcRJv;gHse)2~6P;Xet~cWd-_^L*QL+ zn25IjV3MOVys+acOn~Vna0|eQ*0svcC9q3e;Bq4a7i34_zwjRG{yOR2we5QB){lZO zgyz!qlE|fru|SDA((2;G6goYCmg@>70>#Hq66v~~PQpJVoR=dPN z>3^xvkgzO$EGY#)mzbm=@TqDWyN@m6N^GS@vak{|KoKg~DD-Ys0(rq}VA!?#!AiYAXV?T@$P>GK_bEkQvV>5y?Gt*4yNY8<0pi|IR`%B8m9D<=dm?jABK?H1F%oy=yMCV^8 z;eSm{gm!mpKRxwN`j&pDe(Cp_yy*PVf*YWbr>gJC zDR$;7J{WK?MvYF31K+OS8VRghJ7k$mFFX+Ui4iCnnCVBfE?CN0h2}UR1W~~gU(~kM zOtd!AQCG(<i$tWRa=oI}v%dg;Z??w4daFu+xIPFJnf!}calWK{FAXih?2NaF-Gi4nRdn85 zO{Z7Jjawi+wIIHIMiOV+Kj=lb-TwnqQuLHU6d=wnsIW|SpA*=ZF;{a=bhTxYqeuS3 z1%7wJgkDNoi>B_{QPBfAo^LTPN$TE7EYhY5d&scokOnWMM%?81FiZT^=LK2(9L5R^ z`ti?uLn-d&`{+jU?q8QNE4YLXhexVSSJo_ewDIX8>o_<`RqCFZ#*GO4QE2;|O&G^ zbigQGu|aJl3jhL$s95xE;Hzw#$3v&Lwl?K5O@R4Pk!rJ~BTI zY3K8%cwypF8u&f2_}#xp&@~2VT`~-0zkyey5>sUrcU(n3?|_F33jQ~*&c|MFK#pm) z9(?yB126KDvCAig5sx_wPbBbIAv>DA!q%Uzh(IQy zXx39+>YG1P0|JEYC{;il`y~RgW>V{IFQZ2{@CYZ*(l??fX-{S0OYEyt6H(;UYvqwb zCAKNSaHS(MHF>4)!xtiFIR`pyvt3VQq3ixAE|U&@tM~OF6cx8{v33B;VTU2wnO^h`d23V!$^%;K5up<(%HNf~e|$QJ+*% z<4TFVbK<0OaRBZi`4_Q+w^zc=A72mah=Gl-pGTnrP(M#Io$rb7_Ddc#p%t}(eU;4c zW<*=+9MkyS-dtZMF+XY4AkUmkTD4)l7=wA(>cz8?DIiyI6yUjhpAzm zEV_PNbhNxHRY%{h>F~CUy0?x@UGg?WlUbh_3}5c*csra>o}X{`pZWes81HVFPM;)K z^FNY_e!|YmglFDJCk??6x&3FBeqFLS5ep83(}TW_u|-%)tOPy*U?w?XH(6yKZRF*; z;WvHDg`qk@`;;9TON*=&b${q;(MjwJ2@qvho3i`da4dnVm)JlAINoq&`y7cT8)1th zlZd}6XKM3N4GoA|w;^zM>m}y)&y#}x_9!3>JPoH57Roh8c@Ubi+iLR(BlGBVJA=~N z4eJ7%p%~|NKRV>C_+O|S95CUU)?}T~I^~W9zE^)}9KFB7K)PNsvnwF0ctFzJK?Y9Q zQw;J1=arGktH81?U+V4Zee8ZsV1D+d0BKeUWO@0i`M95^-=p!WRt_!EQ==IELGpuUGy-N3>~TQm|takF2lV?N7vxkKT+xZr?sTdw~S4 z^cyTia`)knPW-js7xi3xjTU0VEs;l4eIk_5y|*`r{tn)bNydtEy(QCIJr(y>D5XE9 zE{Q(Oa}b-1ZAOfVg2T(IuvDZbQKYh#h0$tZXcZ7s+#ZS;?$#poOnR7!z^EG-rloY) zv0_IJ-)j3yhd+kB0=i|aDq@o6vM_jw>YX#G2;o8S4B+j09(Pq;+Q!}fxTgFmT&ZC& z%!Eg4ERE3q3%LL93QY(jv#h6Ar|@SW72i?D`OPd35HYk}~_2kEQJ(LnUEN%+Rt-m1SlfMTdew|*GdG2v^Z$5Pkr(VYaH#96P6thg#s z7KyqnZMQFE+kH;f!J+1II35vUNt1ne{ybit#Rv-nImgI~0>Q*zQb?P#-64C~=Vg4} zaEuG&ibX*0S?Nji|vZ*uViV4^sm5r3A4M z{7^)P&6ZppU#H^)aSD1``OP4sm59XdZp*prAz<5>;{%Pbsc@@T;a73ryOOk{!S}?c z%KxUbJy8~p0@k+bmQhtpdLxSl(b?HEGdQaD5po)oq!MsWdwr3D zIJSUY@xInL+>AdKH_8Qs-dA!0B<-GCB$;Voc&d=1?{Tn4i0=Z(WSwxT(q-_bZoR%m z2WryG=s@YlrQ=(EPXV)d3}R(|zkW*xcD*Y)#6(To=rTRvCUEUibVg=OM~dh@BN1Com@H>f zP)z6LXfAlbN6zy>ZnDFO}HwLVx|DTZ;u-e3g1j&@inB|xcriHlrnHrc& z7TJb>v!?*v-&5JC(}6Qnc2GX!HBos97E(wYQo2VrIorwu76Dcoiek?(5t)^wvz6@n z;`4d)74mi2{KcbNk}a;3s``hD?BvftNoTs_3-=NOD~B`$-=KZOFrfy)W9vV{(f8vM z=D~JGp=AVgFNVpi^HOzpYm%4`#osKB?gx=o?fY&{m~NOm<^O<>hfskPyMoMw0Q9(i zU6W82`}yO2yl};pICcY4>}3h`Klfvlm}0c{IK{_LqJ7lwXh!ckGKpZ4FEH_196of0 z&J7EJJJaoSpe;PsLSK-$A#+3MSOv-ah?|1Cf#SLBySJwdI|;`mJ9 z^YYlezx7FO0Qc+${{S9-Bk*77L-3MO9~(~$fm>c~MPH3Xhg^|i;wUr13z;KfEz zM@ZkpGXiLS;IpIW^Q6ag)*y$pg?JrCN>X}Z zz2j{^HMNv@1RWOPx%S>u*Oy0!{S!Qn`Sp%t09j0FI#)00JPCk*4j#zZK zry+zs@HzFiIDFB0f4zOB15G{XzeiuE{-H(g9J>tqZ}tz!KdhO0^UL2W!7lFyF;!PD z*@RA3fZO162a($@+0+om!P->X>jb* z$O^eXDeN+;-_E%V2Q&0=3gZ9T?LOSZ-6mZ$jEAYpYd*F4P7bWC|3{ADMte0Sbj#-$ zuO)N}EP+qG?vVhQr5}YJj?<0?e3$(e7}PjPayV;cy~*5Lop zClb>!?S>}9pPq^3dqKm}%h;EzIy^;z9xkMbI5rpBd(%G8)h#TqAZnY$rEwi%R^T#m zZlPvB9_|0PvTW|`6X#Lfsfvbx`qn8SsMbu`_fY5SVL|P<&&q9Z?M!y3KXndX$IM^1 zPha4+n;r@H+e3|lY}30pqcW*4-zE?h)5DgtL53I(kb;OZ1|t04SN@-1(e2LUz?x?Ug3Aj56me0WK zuI#k@VG3q>x1L9RcE@^~B?EM{Tn9oll!+n6uzoI>($Ks=UoZTR;K8R8Nb4kHl4Nj- z#58~+xU<(knFMDx&d({0bTVok3HhQ_v8i4gtl$=Uv3w@hJw*5l(hV#zEp0eOI`O2rlP z|3?yqjp+&WrB)N*J(oap+`_mDC$=r%s4^l`>kW&&2jTc(0$rSdEU5K(4&n29>9be7 zyxoV1P=YW`1ZIGjV1_h`c;2-VK`M&3YSPWr|DJW z^6QqZn;zf8L@_6~Pv#HT&C%t}mj`W*CPaAq>tVJFON%NdlMaa;sscajuj1n0{(*d; zmPsGvo{^mH;d{?TZxsZ?$ z2@mw&VGH|eU|O(}6tm2_GnPq7_pd%{Ljr zfPb*Kth*oJ>J|F5`6|eK``H5qjxF)=T6^kSWiA{Z?i7G3wiLvAmaln#hUHE>26a>q zQmXc=VhI-TI$`R5a-BfCSZrTOuc`ZU59*h_R*u#Z3JS`qqy%uRKp7Q>P4`LQg-Tel z%?r>IT&T%34zF^dx?N0w;-HNJNc>UdtpgMs=*-)|p!zJ-6x(5z$7b@!Q=<9C^6JGo znSBD^5CJ1ytshRF9;ul=_;U~sGxf#T(DD*kC~@9289rIyXqNGfSPHW=n4F#0IMaBZ znd;H}0T|^Cl$QPvC05`S0$9=m6vV{Daan=DF)84-6cUV8YfMMA#nUuBQ8QDSnv)~m zVOhr0cBxmHQS@@kj}MPv4_@@0zWmyd&GarvtV4r_#{EXv?s1&b)brk5{s>Lq`4EmgxeHKyW=$Fx-R)L)58&4V_SB z37GaJw90~L*x}gjUC496Fn_P-6WmqX8}IpKRm>IQ;BGJ}GCeavZC86tk^6NZvRg$r zyOGhU^gk?cqSsWsx_~z-hOT?KVYyBqAFjvs`w4N{UgvOyeA7IrG;pzu{?6*>d@f;o zm}m}et=YAt0v^&Y-lHMzg?bh|J}(?ce{T7n9Nb_L2MzPWjGzQMJ01QEml~5ab?BvT2O4Xbm~-XLJcsYGMlDtm+bCV`FOs zcda68IR)%Gsc2^=gr13ruyGog7=jca z$sB1TCzT^HJzrJ|0B@)B9S+ar=V#wIE<3{L23-btK!a1sQnCU~h&foe=)F~&`oiu) zI6K`^DYHF754SWu+eLH`QAty6BZXK*0II5_D2tH$YgN6f{kkoG&!dRT-zl;?Fk&6Q zi4R*7q2MQU=~u^=#<`0Zg^vf8o=6UMXOfyERJZ|8Q>d58GoKHjhs2U&KyB zOQkCF1JINRPkO%LmHFL_+TUt%x?PHT-*9}9U$uVldOquH_dTxiIu!;;Gnw`2hd~=i zH8)FWRyi2lAR+o3vd|_Mm)3)am&R938Lm?64#i$#OrQJplqnY_%++>2vQxj=}wO8nvmxkBndbs77O{4Aa-ckYB#y z@;=$Ph#Ngyoo{Ib83!Lfx{{zddWqh))NNRnoHoCUU8vc)EeP1T#U1^49s6N(G1#&K zt_8FZC4Fvtd1n>^$9Gso*~E<@s%~wytg-Pfcd>N8e)U;i=88dOCgtz3i?WSp?M|6p zMy!md4-Kc+F-r4gca*jR zf>pa;sV9u%K#uXGPiMbB@lh|H=6sb=+06$x_KQ2I!=N7gH$m=J-*fG^O8GOs?UMNl zIQ2{&BlIzFs}ZqF7t*371tLsa5^5>Nejda$KdR1}fs?^~Cy$5@w*#hZ-n(MXn;SW> zu&2h>w51LcT1y1pbfccQhbVqM;0OKRWxA|Og=;7>e7=EqXFOPXh%Taaplf$l#;r~r zixG%~cFe4`zi*~lAXwUY9X9L}!|#2L_@{*lNL~13ZoX_uy0P*X(sI-CEvRbeJRWJ} zb(4kP$!s@6-*e8m(;ZG-gf~gEn)K*edY-^d$hv+NalzkMbC^z#uF5%a<>=R;t| z^HWXkCz+y-&h`omA^2eJ+=8i61qQYw$BD?cDtozf?9A$*N6No}@!t?+Cp(w9Vu8_l zgbalG;K2w#Ld5^l9Qi2-Hp% z4T4_nqU9M9HZbnYz?bmla@J>mxy&fC&H`Hz-fBsS4x}g_rhI}SbEk2B+Wve%5GZ8N zrk^zi;YTP}4NLGZE8CO5@vdQ?MCtvD82-J3hc{!O}S0h)(Se8a`)VpN0v0=6xV7vAIlK?)2+@{cMu4 zF%+vdJeyEM8w?Xq#}Q8KAy|VN6*c(POkt<@l;VOcr@st(f=%vn3D3WvP#V))5wCr| zMr3(p`^r!`=IaL|CQw?jw{R;cLaod7PRr1Bi?;cS*FxY&-y%Tg=b}qAIWYYz-p~ZI z^z!ct{AUTSkJI)l!jw8uRnQwumY3-MP0V$GR>^LHC0Q~*+j2KKVKPDwlI((@fm4P) zxh>lSf)W`a90OFLGRvlSScdoZP#C_p#wF}FI`^~QIkq1ZO(HbW3S>hv@ka9B+2Gyh z|GeC_iP*4eaC~M)xvq#VM<{bR;2-20AbeOZ+bxO>3gIfti$W(h`9rBB;&HjBP6J*; zsCXk)$!PKx$!lPy>_|ArOI2p#B#9PBw6YxS*=bb&4a5IIZN4VCKJcsNb^A~R zbF0P{ip1`oyJVW{HShep=Zn!J;% zj>RX>_G5ztrfrn&k39(u)^OihTqZA%hIl!cnb@Pke)eKnx?+uUQ^h9uVY?wZqb_>L z%Z6f(i|6k{$cVGIDgYDbjR+$V$Tgpy$*k~3IKuy=MBS=JM9yI2SR^N7*lj7k&~N?< zOE`|M?_iE;qj%OgS{YsD^!Vi5OUl*p%oa@MU{L`<1-E?Nq{V$1+nv%zfF9!)8?42_=BF`Fp2W$21LnLgjB4p)tJNpEY?pN*9JLu~L9E^-zVLS6a# zCOd-4f~`?CR9WTM!a}AtU`ScsE9h_$yh2$qD88r&ysRza`5%#PTrH5%Tsv@M)vC@# zgSbBudP5tbM>z%IkihT!KLkkTiQdM7lk~LiPev8=l-Q}tU5T;YY-9W~U_Pds=n~xg z+u7^`D>AZSv2`|A4gQXtB3v@`cM%ma7}$t*G)stiCUGg9!V@UHtzw#jMHnt>CX3LY zx%zmPMa@&K(NU-*hu7J8!0lLy*(}L&WHfHTT+4Bjhuc%uRbf9Fwx;mFD@IXQ8k51t z^Zai;^s}o(RxtGIHLj1Yj@y4o+;OkSUGee}G`xI^q@NYC-z&H@Cs z=SU<_pt8OZX5!_@`zfsX$CIv50Tx#GFl`Xff9tO1;OjmiZh7<2{OZz21ry(Wo$?4~abtrak^*}NU?Jr=PPd-k^mbGia>tsU` z;nHsrVns)wjp`HN)anKVo=1$ZP67QH`yyWc^OW-Q`912w^6w?)W6Y-6noZpl3J7Py7c@Unlpt>!o5fem@nMyapA_NQQ=m%8O&) z1mHTr%>X{ST;u*pELq^pB2I+WFij%T(Q?K$Wun3FJ{@AqJd%b&DG;dUqe~B@!8{GG zTcU2z?8m$@!TZ5GO=pv+faSEV+AIj2u>rXdqLBbbl zxLI8^n&92Jk(4L{brTa_=GC$Rlz?5sp8?wvgHT)gu2jfOmKuUQB%rY+WcK2*+tKPV z6v;xeV(RRyfbL`J4PCZgXGWL{q$>GHY!BDC9sMx1_^`Zvf7kjdm!q%tkohQ??ivw+ zPY@e|(?K_z6cqWfy8QJ7th}AgE~_X)=aMDZGHz+ffThwho3W-+GH+QKMWFArl|VEY z5vHd!&Mp)PO)kl$Bk01%G-W>oR~X0Wsjq9TaV^11D`r(M?G~{mqMCSL5$Q1=3iBzW zbgrl!+cUX{hZ}>&bR6;Is`DZjrvaB+iDqvrL8H6BEJ^G_e=kNta*_t2|qdnQKA_p>|7Aw2b1!x0;$NL{^wI*s0;G zO^>a~OKxFOJD8A@XW6FFte~mOm$hb6{0XmE8&%_LT&UD=)LloBi=%?Lqz)DM+ke3) zlhnhWBorG#)SvkG#6%QJw_AEp(DP>A_j69$T((qUT4Czxw7Y7i*|efqrZw-(iDo32 z0aeark28hP2d++KmYoq^8+8kZbpl~LTH8~W<;G9z^*l@yqE z3hlWw%-0>Y&M97#9Ban3DGe-LX{LP;t6;(dC5;2pxmCmoOqpmm+FP6_Sb+i;zn*2% z4+cXW4s!i7{zBb82%+j9^mBwq)bieR%CVG7}dUjxn}VoGS%wKv$_XRHUY5{&aB( zmH|{o=U5g?N_K3+nw4S2?#FcRl!!d8vDB=%iyI7%kFzB+O$-N z=^*kWD_9h6L>D;sW|PAET}a1Ee<99oHI(X$?3I5c3zQ-$;)U14UBUb+uU)k32RIqf zsvohAPeWEVQ8{{60@{!@pi%#xk-$Q(!3Q|wU&Dr{Y5wbmx-hjm8>FYb20wy|KF zfiah6(wU=Lh_j#D?L&C;DmQy}WepvM!%dY3eBx&ov3+6FcAidI2b{+le4Dn*geg@{UhM_bhM(ap$t(Er@B`K*06X}Ow$bbl{0mdnf#KO;Ec4TN*# zDg$q!;KV6Cf0I#7eWzVDy3I!OXUgd?&^tAwEsjltphax4y__e@sq*s^^B` zlK+0a6&zR_ZCJgZ*OjK< zFS};o*nq>CQtz`Kg$H;=m&-JpH*bc@EFi>ypu34u2*71JN*Joz1SSzy1c zST=2H4NZdki{%u*9RV8s*cV~g6%}aDO!lHAtPIXDG?X_-GIz@2fsnz)CM}>XQn!Hq z*HvUZsTjSVBLXD>c`i=KT_rMTC|w0Yo(K44>Yj)p^H4r+EL#DauE2o7b?DB<*^m76 zD6^&qQAiZ_)%`Q5vIEiRVBfTUYQu^Zp~l37aWIbat|WW@dg3E7>z!ib(1=lx0s?Aq z_PBmKi1YGpL(8dEBv8?DI}TL4vp zHe&GoVyLx9G?f;SBA661fH$+_frW>eaR+Y-1;(aubH;AY6QZ59)K|obopJ%rKDvyy zv|ONgk=PNuEq%YA6Y_BjB2S=W9cj9nb?;lR6A@?KCs+Nrwa3*DPIFSdoU+8f07CnF zhs$+Rh^^Q1cqudWNXERMvTY>4FI6wD^{vBY%dU=g_nBI@+vOd=^)@0= zb@V_(OqO-?uFF1v&>5+@Ff^^k&z~IIS%68qMMf@RDxo)upEyj$5i!*xzZ2l4G>qBVs zAXBVOeVvOZQGBblvu4xjIgOW}@f7w|C&$gDr-3+YT><3|Wj0ewqi1fzn^z`ZRqG>0 z0Q$6YZ?Gppo(4w8dp*X3?1#UVq>0>YyRIyieD>S5Mnb zN*4QVcJO%h$t?O@%!%sGP!`xhGV_-*cU2xuj5lkv)dXIC%BF~@+5%eGTjmpZPyK}B zxO<7Oaj5JgC@HC$&g^i>ItnIh_)XJOx3{&Zq2mQOX~BL_qb5DSz9XSSXG z7$lNZGe`V0Gvjfi*BbKDbUQgCgMHX)KhYQ-iC+SxW2?Ex zxWm};k@1SrvE)<=|5R5C|L;`gu~pQ5E>(F+pX z@S*eE3eF~iN=!ZmMi3ViJ_qQ!~vpoJMsR7ME((+nYTWWd(lhc-di! zFWhE2YRuE=`z~N_8CzwoPkuCa#?W1S7)65AMhIAan>2ioZSNRRV_|aI8Kn&HlAwPx zE@%;h0$IMLoyg&hU;6Ry9tLCJwLg8DBDBsrlc}C^NfQURfay4Lqqz};CLtx*v;`B? zK}>;NK<7<9IiU`+)Cu(MLAMl3p4A)Z^4z|%ICF)7%TDjnV4qq!sGMl3+8%0F+oPn2&G`Z>$Youx;c_#e_j^IGKj1`O5k}ik!LrhB)<1>?bUp-8V~! z7`TPE;6IXK49r6KL;^=JW@xDR`gua0Dx2+&rwsL$XAkEatpTH9=6eY%fE;Yx^4dOM z7(1H#b5`RsJS~R(Q9EbY+KQX9(`H>={~8FPtRxlPn+LGUU;ek}H^SzV+9-J7LglE<-&)Cn#SFxO<4WG z*cCJY&UJ4>T8_}Rfr&zLZptOnn$St#Zldl_YF;Mj9fy;KnujMebTtdh)HDs1e%X)N ztCET>$D+b2#$%}0cpRBDO`jhnIYPRfcbLH;jmq) zH#{+*t2Kz0Wq|hwX!vRoIs&0HU7H%jIovk~N(}a%Zlh?uw)ibYJ-*KEu}q($f?ln7 zK3w{5unFING0pxu(7Ae@(Hm$B1*;h{lMlYFPU-MUi}~$sf|eCoVTVONgVPi|B1Q_B zTt~T{GIUGKjP%DfxiZ|#=EdXjiY+K6JU)M!uW-SPlNr^TsT9K7Hm^!xcc!)d8=T>d zirphS*oHEEOB9W=9U6giC0j2}GBiD&%?-Vi)gQz`H(C|2W(g;hj1n2-Vu;57afEe+ zrmS60{N0PN7?uz#j=pk25mIz4^2Rf`b_wJ0yfe&e-Ny8I zA_~o$`WF@3#qW>VX^CG;Q}0%(v?9VTi2_TbBX@B1+?V7JCH%sh?`wKztZ6C6&7hS0X~6Q^KUmw z6`QRb;p;yQjr1|lGr^D`<-il*hQT~2C{}sxeR&?Y$E2?C^%IWMe^>Cz!j=26e z_vc~Da(Kp8CU7vbuuF@{`~&0Hc9~xlBZ3>fW47wj z)L?tGmBBZ{+uV`DUOzJ)$1OfVT$YP2XAmqG-}#aOFfyKWK5w=lXN~z2TH#bdt%a%p zVp7Ye1U}SZ_;!wle-*0`=YjpWKA*$Y(pK+OKuBA{UPt1e%=>$IXoZhMcoz=Z8O=yR z7IYF?9WaK;>cS%duJrSM&z+cfs&Cis^x9dhYJNd_-)NE6mB5XGOF9{GOfhsYFnos6C&m4}EUq0R;&_ZSqzm9fQrQ~F zAyfw3y71*zrC6B5vfo7nN$cebvKDVXgnKhzJA#dQYW`%e3{Z_Im`a;||FfC&U zWlWWSTC7YBbg%G+BF>Nh=L8j$7%ZI0`kVVO9sX~Me+dOZp8AxMYqkrG!(iPx!onGZ z-)ktGd0!DhaMSM+GuE^Pv_l6!HjIMh62g4elrrj7W+pLP=Xk^8Bc@7wdU5fw@}V}6 zlX5KmU-pXR^b2U%=cyS#J4Rv^2H$L>?ya?;pw&GQ%QB4BNKw+u#G)3XC!DX76J~`* zQY|j@r@PM5%&d*S9@mi_2GBTWLI@Snuop>Ib}Gaf+qkE1>Z|>24ZaamJg0vb2pCt3 zbtKV%3Z3S%H~K7XSovFQZP|1C3?uDsce8o$86UbERZ?4qkWabc-tt%gm6AMy^PE~8 zL`_^*8!766I65ND2D)Bzo0&%tuCT-on1f#OF)-&a9W^<=W!nS8rF1i3I)Q-DOOZpMZt&vKxrosdW!X37Z*z#xM zsE>HN^!9D7eM?Q-@Ec~N_NNcH+o>PQUE>&PdQr!=oQ)`C-?{`Oz=x*hW$JLrsbeZ` ziwYy!2XkN^+f{BucwlciE@71~i6tL*JiqtK7Y`=?`vM!T*K<1@B>Y2K&M&cBOYlMMXP?FU+sPaDQ1eP0i?t!)=~q4VYcRdeyNGGXbH4xJ?s|!uLg5 zv>$*EAr17y%q<;mmuzYnw!27woMhRkxzm-)1dPpBdxGHVl?$YVP964hVIE3`V8%rm z3)rJqPclN_hN5*`f)GQfN>YvkSp$<&P_zr=d$15`N1uCLr@ci#^ZXT}Bg%dz=RshDJ1^#69JPE^xjO2-a zZ=CTyE#z&>Thi^8XM3EWkaeKD-QFDYn{Zp5g!>H|hf9|Iq~NqoeL&K)KiYtn%i%^~ zotv^0aja&3)%+eoZS~>$yWmF?(kRg4<;>4=Vtau&{bw@E`s#Eg58=V(+4gjF+Bc_i z^iu_cK(V@e=MlBOGrYSf<~Tux&d?dlwfjzZ8bCok&sldS778`1ij2H06Aw?+$e@;r zG3ka|O^-&g{@DiJ1wdQ~E4KafjnzK2uz+DVoY^+tEeaA?&++wFFpfNQ-0*o?w!fOZ zGF@MYlHd&v@=ZtwU=9HCx$?m^_?TgT_}ybk5U;6|a@*eRb12Q8Q2t3yNpZWFi6~h} zT?n<5QL0=Glfn5(;;QKpnihx2#nAmecZ|sA@@}SO`|neS?)g2(>u`HX=fc>C(>|2b zA3J4VfC>dae=^c{F9OcNum~V7p8}1s7hDoK6JCz54UYxCaeI_!+kre|bSH)@IECbjUlGpM9?G75zY23&gOj4(TgzI{_wWWE~poa)7#_GYgf4wM$OFqC$a zwtHP29PIw+_BmL-a-a4i)PNp0leW`DP)!JH3yfOU1U9;|Hk7Hc@NZCezkJTA{Tj-` zOYJ~(!YN~?j!0$E&wP-buyhbncfjDn<<$c7sWmz6g_}OtYHXTK!G1C2xb%$0b>$ne zs23ImtRS_@?bm0x}rdZC_ zBo$4!}xzBods7MO}B;LAc5c#+#yJC$>2_K4;I|r8Qk491R0z_ zaQDI8-5myZcfFJE{(@esySl2*KF{6Z2WmzJ9MqZU8m|Dsv^Y}cef5^Jb6t>ev)`!6!@29Qj0hRlA>F36FN4#ak zRHX%UHXk)&6E$O}#Sed(3V6>)b)-lU8b|5IY9c=ae=USZ8cnHb2T|4H2F5w{ST;VV zO~q9P(w8fwFM+{7M`oL9UU0CQu{&cNIILfaMuQ@^+NgTsOU(YP8IH`ChXa)ZwM>k? z;=kC$*OO=$hwg_1@&$g8+YZJ@6wgy2djz7e3JK2es3=&CvV-&`1B>v2pJdG8xYT2bd+rN>YH}4aH zPEV*R%@gJve;!RHOV<#$a?N_q-XaNFYmt2UW?nLYZyVB-Y&ouEzMLq2OF7oG>U$9! zHI)Hzxm&L`wTlH6OCPP%ufwc&<0MK>d@Lx$9TO&*Rmcm+Hc;zJomdoT3>jZsyvU>- zx(goRcL^=kUGPSI-w(xc(x9q{nxuAJm8$MnX0HU9_?Q3(hdf`c6j)}3j zXYni9G%JltO#Hl#QBZVV;FKA6jk`DiW}D{n&eSF7+5KGJsI3P<%Gpr49e3J87I3ql zcJhSM)$O{ev#I_aJW1{+33z_54bMU^F;OG?Lo1P?C7Na_Sk55D7KqJOFNh&@KG zj}rEwFT!LZIUU1VzZK-CGHbMR!I9zSe2i89-&VSe0_Vvq>4Cm}x=6=2IJS>qv{E=xs<}w9*51Df4jv10 zPkOwZ4s*p~;w@`t&ror(l2IiDgQHEu!o!r1of%UHvs*d@MgAf15u&rFzSz351dS_W0}VC? z{60SjSe8{f?sEmrS0bA}lK)pymTW=~Ej&L+;rr{xLv;j6X8I_Liu&-vy0j5D!uaPT zH8c`G(o(~tHe)$3Y8C3riGOo@u#fw-}PQwV8l7 zq&LQ`OJZVaO8PY#I^aXJ>_`g88bvhh^3GFi7w*AW2O{0*|L#>m@F360XCEqaS6enU z(vL{Ny2QL#Z;CuHo+08;)G?diZ~A5u!%KVgWNYKdIY{tRmyJ)b%Y~zM$1J-4*HAV+ zWO_dJTfQD!gxBBHn8BL+g${(TB4w5?*HUyCw$;W)L<{HOC@*_YA={-u!W5os#kIa2@Wl7M7sJ$_%ETd;m zMe4vHmmH{>@i~ckOI^9VLbqm{m@-hSQ#1ySPA5IxzA4eR)@w5KK!;!ZnbUZODRrse zO}Np}#oQfCqLt$Q`?PjOZifdvALM;PsM5u?Bw>b|?YA(v#EW7c>J~VUvt1r|TFVg~ zAy(o!)*&nPu$-t6NJambhyA<2Pl+@5YElIfK{;W!LEW~0P}&X@PM?3x`l_&4e`tN^`f!*p)bO?Xeu+4K+md5ux##)p%~kNC z(~W&b@V_<7{Iu?2POV+{OZgV@kS1%c2jpA{rg#s@WREZ0NJ9M$OUL*lW+F8OA@+G= zj!OkvDLxj6+{oPJL-4NlnR!%L;^f~ynpN0;0%2p2;moPR;==s-z`)>*Xp^30W@bcO zQd8|9C)M;)=-?w+SMno?T714gF>#8rFy@xLRKOXz`wAbyb$x)V?Y+bFyrE?X1Zz#@ zUPZ4y!}O#-@XDpWW_&L)W5<;4(1+xX+4}8^q%a}X1+Xo#Z2tN|G*3wiF{N+MgcV^Y zbie8Q)gd))ier}N$$@>x!{E@u^zi@xty>SZ*HLkPmw)vcY+&37;Q^)mkJHBdZ_C*=N?E<;rgg!Mp$9*+Pi*Gt`<3o)0_lJb?6SuF^Jc^6dv|T< zSLV)1qE1bT3S##VI2GNG2(bSH6LZ5X{;8k!k=1i zS@s$k5K*?t$jxUxxCCEMs2p-N6pKVV1&8 z(dT9NZq^XJ(V3bKGp1ylUnIW3i672c%gmYTp=mDE239D-&>l@nl`VOpugvsH9>{*@ zzh1+}#{qdFra)@LVx$(hd|fERv76gS^^iPe8GWzrJ6`T*O5~e#@a6$SryOHj$*a5 zhc>=vyczkdS_e84NdeLK2+B5_!Rd={XKTM3Mvd;jKrvlK9;Yq%nrbX_9#f?+wbm2* zv(cMI*;;1;dhmb=7ry&iA1AK*KCNufAN4+&?NCHKPU+Gl-G>wI^Z)uvH#4bb1zg9* zoG3HQ4P9_hY+*7#vj;Rgf0g5@3rUtteiDW#uxxMypKxF$XwxY}&=7u3l zwS*}1fl*uYD{{!bEbaMbi0f{xOirK3F^^_97y91xnNN4_g=N?J%$ib{Fr8 zHC2-`pDUY0mda{vHSupp)F)*&^Nd8PN9`shB`Ln7O#CfT_}5h-Le7549C%;f0$u4O z04j!X%_ZgPhU`tLWF34u7gC!EiU`;D-5tj|orJv&{$}m(_Dne3oQS9&!CT4v_UsL) zlKyPleQn~7dP7NT^rEz7RK;kvvz{k{!A{Jy7kS+D-hh4;@Z6s11HAt+3w%)8{OYjv z$Nqy$-tv6#3KqKIjIVW)4h%tC4aJ}aayR@%`**Q8C8Ub1%?6?~^N9wc{{~-+kkV~Z zTRhv{0)OCP39`Csw_tY%hri|cSK2Y_{ZtJE`mJVH^h<@Rt zm)8d$_`7Rv>^8Hc8)$_8C*4Lv?#g*o(Z-2bsa05|C(^PyQP+`W@4Ind?c#JVg()j} za5Fb{4i_?Q^>%aUH`)c9s8annN<&xU!5(D>E>MBni0XQ$SwNV`8;4Cg(bFf9U)>D$c1xzUxO#e+$+4hMIWHoPd@V+st^A?=xJX)U zyGFW8qQmJgd~p6bHa)Qbxo0fM^rwm%oAP&*%Q5~UMu-VKS^uC7q3-FVS?ueIJ@ksP zF)<&Z%f_aG?PXLcqAW{whuZtuBz$j`Cdaoaj#mk0%X2mZ@@TAhF*_2+z9BGPk|lZ7 zY`Hv=rxdhTjU(Tj;xL6m%QT!t%ko)A`Y(ft(a!uIJ)6uoq4%@OQ=z-nZW&KBtoHfq zuN2VM36~!vQ3!aqbES;T19GlP<7Q;Zy<{wEFIcz*W0`;=O>tYyc^-~9`0r-L7}fS! z37RFfNdBh34)Wk|`0^swZFwCs?CKC*wClsGM6yi;tZ`kwAqaM7a{2g|rRC}o4kW2G zHKW!Kq*JuR=?Z`S1e={T)vK4i^DUrAx9ha$sviR&(@rngoWfO3BN9v=>rb8=Qp?7^ zv3JI|(RH$Oasjttz(3C?932v3+Pp?8c+I`h$_LcAOVc~_mrhbB?3uS+p{vPIx*ZgE zz}@{LiO{viOEqwiO=U52XB4B_B;6V2-zW?r=4-Su_qHKM<)w^hlh#(luK0Oi=l&Z_ zhE#i?_s@H3`Ic@>Vp?+~j^S{0SxaISyF7T(XkhfV^}Wk}EAzfRdnv+pN@Z{P)|m7p zhOIs)CRN@zbJ^m3mLjr*cb^Srg7leP-*=B~JcCbOjRC}B^ml|GI@>v1KLsLyDM~&< z(j|k@7cn3krBEFr^b{oNM}wIe%oU`1uh_KpFiIwLSxfdROZFDV(1u+X$ypDdW3@c? z#QTz>H}^q=J+DLqW5_bDz9@Om<7{)=W~nA5-BlrH3q#9M!MM%(HqB}LASbRG%qYcz zrq%~o=a_U)+FV=*2Nd%)vaf^o7C{=R`T}EH!#u5(m`s?+4`mVnd(}%DT_PzVx^u6} zhlG*|ZIa5e7IZ4=Sb!EDr3t5a5wL)!vD*Ck1AjRx$#ZkRuPC9knq&K;QaXRyuf;zc z0Ku-4Ui!5V_@m}-uQ1Lp3Z~p*faZdyVc8x|LXsCm|LAHOhm8w^I!$<-k zf$=-G1r`Sz&rFJYEY^p0q5>Q=MF@K*_HbbF7H>i082ftKcC#**)Arp8h87|Z#kYWI zz^t0-UB@W;iu6!)m0 zWM)H$CG134EyX0Ha1PVckTg3b8cuCF8lTx7-G6u}apzHWg{Yj6KVIHt2jAGO#U_+1JI@Za-8cB!gY4Zmy&fh7Ho9U~&OZ`a55~qxQ-SZS!>U(uI~--QKPZ=C zBBuT(=6^%+yIUj!+U?RMrxY=Kf`bc78Om&GRfdTLwDFcGWB0C>6i`32Vv-@!wYUD??PxJ7T3;m9qykT4pwOsMdpxOks zR_oe4fcWve<{pjf<*GG0&^1@|dr=TXN2NLeA~!zyT&V8?4m=eLO70HbDbpmfb08<` zZ`$b2TAu253R7-4fcc7HfXTjlR+O@#y~EsRFT zRI{tqwAP50e`HqTvt&OLop)}e6Fc019JA)|um2{<2CmJQJ7@HGQiFO&tINR_#Ys$t z&QWm@%#tx2By~Ujped%Wm$2%MIvkg~Ib7c%Eb;olZaN}by(UjL)#>E}&)|=$J#-QbO-z{cDxlWU)IKl|L4sM8>`*aLcpM24 zp_N?7;bl4hjimltqyAG5o?xcBb9cHz|6gcd({)qU@8P6S-{Y*ea7B*NCGiy#*2;Si zp~O1HJ2iyU2-}@2R7$}Vu=8PAAo=!lw$Ih}%hGknnCvyW%CxO0kjN~q{F3||UIcm! z{X8JBJ<+G5CTP&WVu%N?l-oqkoDXdN{@ir@bnm#9++rEh7F;0-vtwdWY(iO`t^K*y zUn@cyT_=S>1C;^uE2c)Do)?S~Re=T0pl)okjG?Wa&;@zRp4}H?6iH4*pD;aH*Cjzk zjg$8O)|@~kT9(Twri)eoU=INFGHhA3Rze5?=A5+vaqq;mG-mqJ zjGrC}1A4EYv%R+Nd3@i#t}bF#urii@`k|~HE@L&XsD4w6my+O*fk=qK!EQa}gq^`h zs_=4G>AM#;gQN%*kqlKJ3x0>&??J%|EQyZ!cR!U>Vb#>OG6z~@xyZ3cFl-@Zozj>? zSQ0tC^$f|!iTpkn$lhm{aln(4DAgKh*F{)bk)h1qC1>hYjpx-a0@_qzQT!JM9yCNP_hWfo`Yve58B#q!K z<+q%^w`$?LBkLZWC3wYgh{;Og7CfB3KP-_6+`SlKQA@eY#xE~ot#h_s99%BE4afN$ zPx$n>t==1JRrZUVQs!xhl2~PQ%r3!OhbBI&f&Mdr4U*VDqT4eC=pI9#C^TMS%f-sq z7Lty>D!nrC!&3f?e;jqUe^i3Et^zQKxI}@G*|)dq3HHpo-Rpl*}}nMf^9u(d#%yW|F~gQ zcpQ!}?Nh9;+g1+A=)A->k^e+ix=_#bG!`c&!{>28P$%!S)dE-e^7q}y_6K48j8)OG z?+MjFyJS1H+Sy}>Hi=a&ra)+_2?m=|PkIl0-y9BhIc|%Y+1IO|kM$UTb2ESk7V*g! z`-GJ27^a6BwdJndwvhb3Veqfx%9bPnZM&S^!ljN^Tr*z2$@pytDh`3;tj6~0YZ_N8 zuRN2*r~Fizj3i+D)~<@8)6EV;#!uc}&^4{4yy&UtY;*JkNmoq*oFTu;(@s@o8Mg&> zQ~n4IcW^V3oJ+&i>^}PYUG__1<%_4*+9&&^W<>;v?v)t7oAdWQWR;d~d0l}Z_bx_Q zYeQV-M`1@!EB74OeQTxBzE0_gu%8Tan9W)IMEmX98zXP0jT{2inHismHE$dUF0q<$ zrzTqZs@JSikE`&dLicJJA`5$!ovaS=C)#hmjO=QTGi4gIdqr+~hF9iMeuG3(^THxA zYvuFaVi5npk!#prG-EKFpMJ+w+H^Ai|h$s+}7Y{>mKXi%GQeCiwQU?|uNz zE+nn|$|RObk!acqXeXbicu10hvAM3Yx2M234qwacO0Gp~`Kke9w&NXCMe8^8I^supJF1H|_ z(~!r!3@}z<`waFthoZf&XhuN0(n|yDBkl_QdP^(|yupqYDcQ0XGqeZ`f8N$CKq;e} zqN5XpT;KPR0xjDcR0ivU2&ZzjN>S0>t7MG{IR9)OP|q7F_!je>@=%TCaJ^)%E-K?{ zbm!3TV!NZ}eGyowq6URF#s2lEP9HMkUKg@o0y-}7-h2w@48bihSQpd8S}A3MYqp$= z7KHnwxqHf=!^lD8>MCJrq_jf=+NtW^kRe4U*A4#jwr3*8@q{7g7m!a+llAAAJdAcr zrg$2t>bwucr@-ICDd+gk(ICItdD6zm)=Vt;PKhpXX*teBQb=UwJ%VWFuH4!b)eEXQ z>xhQSyHbNy0g9I$6k!H#0;pzi7xdi_&{v;CkjyZwmG5$rkPAY&33{p6i%x7>hr{P( z63l0@f*zERB?&@o&9_*?{;E@vs{pYe}t5=rQ2^(4ON$$gS_lKxw0H{NTAb<)qjK#&X6`` z0GfUCR#ZBgtymd}^kG3Pni@-NbhrF0WL|-iS#Kz%o{>hP#h)Jd2d26Md+Nv=%KJdX zxpruZ*1qWBIaqB|p#?L?iI`4Z>BH<{ZvE#k`-*Swl)RtpAJ-G;q3|=T-*chRRdvgT z%bHu|{D^A7Lzz6Hp^1&idZ)lTM)4m*ka!Jt&>ds)B*0%KU%C^-XiSK48o$K-BbJS; zJ*sWR-eBd%#U_1e>|~J>CbY2Dj%Xf}peDC+pik6Q8@mbhS_e}jMf$d7e4F+lz3oGC zALws^tu9*z=fZlBvhi;^f#hy}ggAkT!|Os!GH#c>Z|1oAf6Q?9y<69@!aV0-tdzy& zbvnq_4GGm6{s@PlBsHcDxzJYo$kzvjpcHmP*DloW%c4!|=D6L!H)uj!jayMH6M*G1W-!KblA)*s@nDa!CZS3SrR4j*r8LI4pOEp*_2<_X;!$4DLMO z7MzAIwllqo{ejWos#G<2_z-e=9Gj-Bg&mhcNSD5Fs6)i15N3V^38H=6%H1$nA{l7O z2-)>e9}%yiEO~?i9lw=7s>6WlFq6228L{B80`Ise8HM+t)3Zrd`gb0fmmfd7ZCsH* zH>`4AwEg6WoN+GJz1{2)&cr$}qT?a?@{oG-Ifqq7dp9oo4JS+JmY^&aq2r#pB&ux+ z**-bG9^^GxC)7wRYeSvmA;B~ZNgUwzxP$WDxK=Ee8{B`Zgy+jsU1MQa8lgQdk-s>C z*HTjEv-Kn)I*WTdHnz)%KPjn%eK|23{Tp>x@^#924c zdYGUWC>IC&{`re<7yj`NE;ii!msW2%izLRHMZWPUNwWQ7JTk-jtT1l^+APCNHD*zX zQ})zsgXx|cc%9V#xx|M8_TRfWZB_obp_&qdaBfcb5q?)x9S!?QR4idPN?%&%q-GFWib)Ks?H$F=bmEu&hf7SH`# zQ7zz_nD-8=a8J=;B!Ca>bB?dl_suG_Fr=2a&OIl3K{0Yr7-Dhw0 z%rJG1bR0znu{iv?jD_k;v0$INT1S3kI3(hVVqBZiV}iqK?c>8)M#EZv*duzSB*#7} zv6IRqrFIrG3m7ZMihqVhr@)U6-FM}DKXo)s>+vp{xb@99SzGb{8FoFLel?dtt*}Q* zg=1G*VWySX6P47@feF@lD%99vwJ4`JJDlUai;QmT5C1`9A+j5?tx5(K=sprx2yGvQ z-zsxC-Rjid_m*Oe8sX6e$l!V0-f%!WHYwZ!@AUOd(^km!yLd}eP5B&mw}-I^r~V$Q zFnh8YU)QRTU_hqsT+)@+FD-tr+3#A=Jye6S@YlaR6#IR1fVm0irUS1N1y{s`GlTr73v*A^~zaY-FAr?Js`dPc%5iZ?E`D zsFpfQb?$7Dyhvsc(`~+xe9?6vY_0z~c)(e1H@tNOQ@UoFfp94?Da=ylbanGd&u15) zP~IMFf@2Z-QSxl%WT`rP#jZWkmGhH3``1AoXor``Vty3DjUhR2@0Ivwbs*cNXX=-q zFdVBa!6B!m)FMHrq`Y8E&3LJw{eYv#^GdhAd-(*ws>&0jz-zsr5xHO!f#78HdEvBJ z5Z7}A-WLVc?&G;X_G0OlV&IkX=~=rf$UDBypGNa37RmHVCY1+U^TLUYmaDvyCELo+ ztK;-qWq1VR{^kjhyE=387T_yHW94X%igr}$iqNLr^+k0Qdn(90p6K`OH(k8U*-PtI z_?@U%q;Qp#LI&v*Q>@m>61^hb^Gt<1fvLGxUtOcaGTAfM2>zKdKrJeH^l}MG z=V!l9zdwczsnGrlY_i6__qi^IsseB0ZayWWaY`R8>#}WwPj1*4EA^R|2%31JINvKQ zGrKWiOnxOk;m zC$d{sT%l>n2hUD=t(%z zdM8mhut=i4gz`o-ghh*(zr7Rm*P}!!fP-em)@~7;c*r=Q@!>qTtW@Nd0kTZZH*P|1 zSMB>6_lqQssx(H4r=ZZa#%m?!WX%)Vt8rbX>vKF6r(C#B>0gpO;_z#fi9Y3;nMOP% zncqoHpOT=uYoYtyUrCSMgX`Zl!3^{cH~~n2zNN*arWWp7xWZJpK=jmEjNdxQG$siD zd?x7cZyQgI8^5wb{`q_>EMMxg9}2SHCmT=RbLX^*0c9h5xAzxs{o|&IB$cQEzx<{D zt4=+w>5phre!cQQ`=k1o?aXcRQag3D@w$_QY^QnYm<=eO_(R`y7&YvB`ogLGr4DOO z`{TJv2TbnRXiPXt6a!V4cs49yPK-?2^?wWp!r0?8mEk<>bp)PHFeN=;t%Z(VpAEhR z+T;(`o^!8rSz&|}eAe`QYPEvw-1?+@_wOgh#QMI3mX#9Kp_oIfQRhABF(=>h>o93A z<`_np-hgy+Sb{!R;%lUHCy6-PC`WJa2r7)Eb4&uYePdKJNa=b%{<_2A{ZRD4^n zT)Ul498f5PrfmIN*rYxDVIK# zcTpH%J!i;&rv66YLSO>T7khIoCYdGAHE5{KOut|4;j{A~V*-89x|GzAcdI*RSi|3% zuSt)RrO{ELJ-1kSxae8dn#N|Cu)yaiv2w%oI0A@`*pcJ$O>eRzhP+BlqBNTM-0t@b z8k-^@R*ZnwOTABO-viVHVoj)1tg>2)2V;TOt=8Mo8ReIo2a4c1kMze~YCVrz92)b2 z#SU|H@$%305XMN7*%;iAe5#{mRN-EXW=FhuV!6p2ZoK`cRu&9wPqmZ=x$AMF_N4U6 zjwDw>c?y-(N67UCSLoS!*Mbevio?Dt$)OG`igvo;Gu!v!l4M zF8?z|oU*~*AFP6qf3MiAE;WaiVb%lhGC+obJ>6j1^&$!yyeW7!dCvdrbto;>G%W=K z|A`2O>=_;X^#J{4(9OGSX86FR zBuoo5zq87LD@(Q3TqNncp(N<6Dx>{tBG&=ta_`mHQ$I}y9Los{Eis;`q^GtRm8{5t zN=xifvgSMje$kcu*L3E$Sfc5%Ku zW|G9yQ|~+U_ABIwgDlo{zQAOAylwM84QKna3^DT{uIMC@Tm&_YcO7)XXHy8eS$zjWNHb}2gmC{BXbxnp8~(qBdNm4{ASkoxRh;$_O%$@@DR0rG@_&a@=z!P#aN9i z*AxYt`{YeFt`E$}(Rrua)qhXs`G&8u-Qs>E8z%I~A@syRrf@6-IsIpwu)%*h>Ui0? zKj*2s54pS?Kck#DOqTu3q-aVVL}NqXQU~ts>2g630itxytKmx+u}Kp2aNNf5{QY6| zU-8fYgZeQxF~3*j(^6t|V?(X&3bWn1D;}#vRkWN|54W10BIPsTaB^9SmM;}djjzQ| ziNKwJUu#6*$38$+g?m*167>^rKIddRQnWUb1=C8i72JthZ_p=~(+;Q{5FYB-8O zX)9h)SPgjD`>_t7SIdf>6Y_wI#lJlANo_nppwV%H>D=gk^aDSWYF=6jb{8S@wu!}W zaHxa6nA1Dn+9&vu;rKGjyuHQlkyh^)P4#2ozZ+{*+x3(xA1pf;tAjc`a-ftS*{Oc# z6;h@$*1e!ErM-AkznmHO?a@}3{v$Zf?|A~se!u@?zh8KIi}y7&NMEA3UJo`NAm`69 zdSKBOfI_2IuZLv3A=%w7F4fq5XnG~*DJt$h@~YOD3O|l=?U?br=vV??mfaF8eJ{(e z-2glV;?Q+CzKJsgZNvSWF*%$T5v}8KRB*xh($jn$*A6{9;Vz#IDw{*=R7_i^vQMou zq9^1p6#|dr5u6EtrhUn^QUK<});X8~E6b3znOP*4(6sPV%*1$jA8zE95*`D;htv8Z z-RzDFDJOXFUiZXnVSG=Tkt^qy@?89k(a5~+Ng7Wls@K_8^H4hLNENyJ?JS_Fp-&xP zL#|#^U}_81=zC0PC*Wq%u6Nn8ydE*LympmKY%m$D@<|*tZ7A~W`0di>0R$(t^3zI3 z1@-gHM{YMXAV$IK*$UZ84K|SCCeyaYTVs zo8Q4*$NF5Y>JLh0F{S~?WOKhcnuu~s9a0?F>4pnsPuO5l9YD_a0Vg8szX$HtuS(YP z3CI*>z3=ll>xwylX_1XbONhV z+q$v30ilDYYTIu!W<@netbOXzl3vU4;Ir*LB74*GaiUZxAQ`+NI?k;`zL&PkG3~_v zV;RSCaNJ_rlqw+;bKKlIYd-L+_k77KojnmA^5B!NBjcJ0Q3;Wr#J*To_7UDb`E);TOgrhay4qXOe)LzI>bA zg}1TnmzcQs>7I`GtiS)uI`n_vPU(0Dkt~=ux)dL%lj6}>JQ7z*AeI)*jBt zqVf+@n8o4OYzY?!Mfr$5U6e_NM+e~AJDmBPw!}veS-!_sZfE3G$Yx;oO8z>oNnM1RS_N-c6yIkn z-|{xzFK@`Hbx`v;8-h_I^q(Gup4K~V6Ukm{K6f?tA+{F~HP;O}fO4%;sx|$}A-{BX zaBLjV_{u-kCwM8YUzOdB*VZ)2L9{=61QkUw#|gWlm;F3&C_LDm?Z(e8 ze=q&LXLp1RRcXN;&zvCBv&^Ylm)_*0!;Z`rv==MjHbvjBT+YV+)Qo$zw{?lyyeFn& z{z*Pa#HJj#n8;~{(AAr>JvShd1G%#1C+T())x_mXbs?L|6+i8SfQW2h1>Q*lG9Tjl zbX4)!2p4MqN0+rcwa?C80=+2vB)G)bOX{SrwJE-QP!ix@c;-ALWFpi1sO4?o{{2D! zrOW>5uy!QOu{_dsMA;=}h%P4~rrl~FnIN~qk+P_-ar@eTf+S2qXrP#5z+rw%;M|kt zxp7r?&lRGRA))lU%rfuzK3&$h*PZD;O~1vlMa<%!M3K#k-4kjs$oXZeQvvr$Y7dcc z`c;1MH^%T!$7-9&y{JbCqozs$0&}YjeahJ>IGRLUEUkyhf)+&Wg8M4lW0zInHQy3@ zLsDQy&Zh2%ot`BoaB{`kMF;z^8DY1v2_l;9m*dPRCNI&H>s<;`&pqr6K{t#VJDWUp zk^20FClzn9JS7zIct42 zwT;Qk?fbpk`^$pQimp)Iq(HDVDq5YZ``4ys>xIs*>s}=#-<8<+g*obQotA?M`+2wJ z>f9V=&d{s9_7%)lv>i=SMdmenDe@|Hu(OBrh3dhB3czFUZ#`u{AvWja=t8$&_4sa4 z_L|{}^CGed6tGsL7rh;7L~XX2Sg#6@5>ca#jAhed0R23zBSWSrr>4#?jM}vK?0gOB zD-|7a;LA({_&=f7A2_M9X3?`E^!}_Kamrb@LB) zHh{>zoXc6^`@%-^*(8uweH!~W)C?ioO|(h-)~Elr72~EL*i_~8F~zH7S^1&g;l?V{ zcnrARiXn<)3e5bG0sv3=TP&+D$e3ldlA6C~t$`3l*RcV5j^s(q zhCmpiASkWZ!9NDet>hyUYcBwx(`wzUbKgZ+D5)e=F>GPw2S4Z+{-) z;4^b$bWQnMgPV&Mb2Xwij3u=#Tpo&zr_EB)tZzxD_8+IL6qTs4Z%g-M5>(Gxvy(X@?aw zHWG;CX8OYz2{fA(m>*~(wIXJUcrDj->$HsBvukZ9?Ce&a6$)O^@DHOZ$@x1d*1Z{9yR{0b%Rzv>Cz&?Pfbh>JUTP}$8Cg>$mo zZ9R26FNe?R4iRM5zn}nGhG%8upy%7uO_K5nP;| zw;rzeJ`4yxT}~$-h9V^$m5{yq>>mbPjfE3i+hp2hF{vT31qYU-vjM7u8qy6X8nl~S zHrhsAT>Hp7g=aBX#&V4!E^M$G@;YCRq+`d0`WR@*c9XCt3_N0{Q%xwt`!>nfrh>=9 z%QV6Cfif8@4(pi1ScUP@FD{V&rIuTw#d;v#%DyXGg5vZz?Vu%~=Ga$$@_jA}P^m(( zbaC(@5>>Dk1#Vt6@8A%QzSLuHkrqlg<*B;#$+Sr|>V5a_RFZ@7vE;-SnQy^DH)-6Z zd~XwNK2>0gxI_OK?vc?DU(@I8Mbz=g;CGSNaa~FF1iqR5Uwo$n=wXk{do#>;v+^}0 zTYt(_CK-V}OC#>Yq$kKdrdM6e^(n+RiuB7m-z@!bO|RxhwRAo^cP_3|a2&Y!7<9uC z&STRnL}#X?;@q!4p;)5UUi!I5nsjZT$`bd4KhG}sBZ07q&$0Np=L2Cfc97(XPX zZhj(kNSpd2pN=-O&0&+hH1gW$^IOL$pPbfaXu(D#&GQMmqsOHYe zJ;!F1?D4Q9w0DUo7$V0wZ4A#5CWWkQsf7d38Ys{PRec>&2#7SSuqr_fr3%waFH763 zINlg~EqHD@s^A9?5r-hI~h zeKS<|jGE+?laJ$1|APb_vbT IndU?A}aHT`#YjFW4#wX~;rs`>TUsFGH?=cR_j- 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

}PHR8cVeJ|U?7B+-;i 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�@EOb0j?mu_1meuG=L-b)3N95_wSZWG@6(K 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 Y-Td5;J*>K|jj{-(YpPe%E~Ebbf1-b%I{*Lx From e3dea28686e4f5c98078cf303bed19e5d1257fe4 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 27 Jul 2018 22:54:42 +0800 Subject: [PATCH 051/497] :art: modify logo --- casbin-logo.png | Bin 165299 -> 28413 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/casbin-logo.png b/casbin-logo.png index cee1df2873b625ce61332c7a7b8c02d0a1008120..e52eaaa0e404053bbd4e0ceef492e24d1eab4a7e 100644 GIT binary patch delta 10506 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 delta 148469 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≷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 of8+Z9`>HVhw>~t-B3rq}%NxQscTj&2ITdi3% Date: Fri, 27 Jul 2018 23:35:05 +0800 Subject: [PATCH 052/497] :bug: fix switch-case statement error --- src/enforcer.ts | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 23a8aad0..73106940 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -71,28 +71,24 @@ export class Enforcer { } if (params.length - parsedParamLen === 2) { - switch (typeof params[0]) { - case 'string': - switch (typeof params[1]) { - case 'string': - e.initWithFile(params[0].toString(), params[1].toString()); - default: - e.initWithAdapter(params[0].toString(), params[1]); - } - default: - switch (typeof params[1]) { - case 'string': - throw new Error('Invalid parameters for enforcer.'); - default: - e.initWithModelAndAdapter(params[0], params[1]); - } + if (typeof params[0] === 'string') { + if (typeof params[1] === 'string') { + e.initWithFile(params[0].toString(), params[1].toString()); + } else { + e.initWithAdapter(params[0].toString(), params[1]); + } + } else { + if (typeof params[1] === 'string') { + throw new Error('Invalid parameters for enforcer.'); + } else { + e.initWithModelAndAdapter(params[0], params[1]); + } } } else if (params.length - parsedParamLen === 1) { - switch (typeof params[0]) { - case 'string': - e.initWithFile(params[0].toString, ''); - default: - e.initWithModelAndAdapter(params[0], null); + if (typeof params[0] === 'string') { + e.initWithFile(params[0].toString, ''); + } else { + e.initWithModelAndAdapter(params[0], null); } } else if (params.length === parsedParamLen) { e.initWithFile('', ''); From aeb819f80f30cb11ea64afdc174dadae8bf2a8ae Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 28 Jul 2018 00:05:00 +0800 Subject: [PATCH 053/497] :sparkles: Add new features --- src/persist/adapter.ts | 32 ++++++++ src/persist/defaultFilteredAdapter.ts | 103 ++++++++++++++++++++++++ src/persist/fileAdapter.ts | 109 ++++++++++++++++++++++++++ src/persist/filteredAdapter.ts | 9 +++ src/persist/helper.ts | 28 +++++++ src/persist/index.ts | 6 ++ src/persist/watcher.ts | 19 +++++ 7 files changed, 306 insertions(+) create mode 100644 src/persist/adapter.ts create mode 100644 src/persist/defaultFilteredAdapter.ts create mode 100644 src/persist/fileAdapter.ts create mode 100644 src/persist/filteredAdapter.ts create mode 100644 src/persist/helper.ts create mode 100644 src/persist/index.ts create mode 100644 src/persist/watcher.ts diff --git a/src/persist/adapter.ts b/src/persist/adapter.ts new file mode 100644 index 00000000..52ce4dd4 --- /dev/null +++ b/src/persist/adapter.ts @@ -0,0 +1,32 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Model } from '../model'; + +export interface Adapter { + loadPolicy(model: Model): void; + + savePolicy(model: Model): void; + + addPolicy(sec: string, ptype: string, rule: string[]): void; + + removePolicy(sec: string, ptype: string, rule: string[]): void; + + removeFilteredPolicy( + sec: string, + ptype: string, + fieldIndex: number, + ...fieldValues: string[] + ): void; +} diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts new file mode 100644 index 00000000..8c29b184 --- /dev/null +++ b/src/persist/defaultFilteredAdapter.ts @@ -0,0 +1,103 @@ +import { FilterAdapter } from './filteredAdapter'; +import { Model } from '../model'; +import { FileAdapter } from './fileAdapter'; +import { Adapter } from './adapter'; +import { Helper } from './helper'; +import { readFileSync } from 'fs'; + +export class Filter { + public g: string[] = []; + public p: string[] = []; +} + +export class DefaultFilteredAdapter extends FileAdapter + implements FilterAdapter { + private filtered: boolean; + + constructor(filePath: string) { + super(filePath); + this.filtered = false; + } + + // loadPolicy loads all policy rules from the storage. + public loadPolicy(model: Model): void { + this.filtered = false; + super.loadPolicy(model); + } + + public loadFilteredPolicy(model: Model, filter: Filter): void { + if (!filter) { + this.loadPolicy(model); + return; + } + + if (!this.filePath) { + throw new Error('invalid file path, file path cannot be empty'); + } + + this.loadFilteredPolicyFile(model, filter, Helper.loadPolicyLine); + this.filtered = true; + } + + private loadFilteredPolicyFile( + model: Model, + filter: Filter, + handler: (line: string, model: Model) => void + ) { + const bodyBuf = readFileSync(this.filePath); + const lines = bodyBuf.toString().split('\r'); + lines.forEach((n, index) => { + const line = n.trim(); + if (!line || DefaultFilteredAdapter.filterLine(line, filter)) { + return; + } + handler(line, model); + }); + } + + public isFiltered(): boolean { + return this.filtered; + } + + public savePolicy(model: Model): void { + if (this.filtered) { + throw new Error('cannot save a filtered policy'); + } + super.savePolicy(model); + } + + private static filterLine(line: string, filter: Filter): boolean { + if (!filter) { + return false; + } + const p = line.split(','); + if (p.length === 0) { + return true; + } + let filterSlice: string[] = []; + switch (p[0].trim()) { + case 'p': + filterSlice = filter.p; + break; + case 'g': + filterSlice = filter.g; + break; + } + + return DefaultFilteredAdapter.filterWords(p, filterSlice); + } + + private static filterWords(line: string[], filter: string[]): boolean { + if (line.length < filter.length + 1) { + return true; + } + let skipLine = false; + for (let i = 0; i < filter.length; i++) { + if (filter[i] && filter[i].trim() !== filter[i + 1].trim()) { + skipLine = true; + break; + } + } + return skipLine; + } +} diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts new file mode 100644 index 00000000..ccaf1133 --- /dev/null +++ b/src/persist/fileAdapter.ts @@ -0,0 +1,109 @@ +import { Adapter } from './adapter'; +import { Model } from '../model'; +import { Helper } from './helper'; +import { readFileSync, writeFileSync } from 'fs'; +import { arrayToString } from '../util'; + +/** + * FileAdapter is the file adapter for Casbin. + * It can load policy from file or save policy to file. + */ +export class FileAdapter implements Adapter { + public readonly filePath: string; + + /** + * FileAdapter is the constructor for FileAdapter. + * @param {string} filePath filePath the path of the policy file. + */ + constructor(filePath: string) { + this.filePath = filePath; + } + + public loadPolicy(model: Model): void { + if (!this.filePath) { + throw new Error('invalid file path, file path cannot be empty'); + } + this.loadPolicyFile(model, Helper.loadPolicyLine); + } + + private loadPolicyFile( + model: Model, + handler: (line: string, model: Model) => void + ) { + const bodyBuf = readFileSync(this.filePath); + const lines = bodyBuf.toString().split('\r'); + lines.forEach((n, index) => { + const line = n.trim(); + if (!line) { + return; + } + handler(n, model); + }); + } + + /** + * addPolicy adds a policy rule to the storage. + */ + public addPolicy(sec: string, ptype: string, rule: string[]): void { + throw new Error('not implemented'); + } + + /** + * savePolicy saves all policy rules to the storage. + */ + public savePolicy(model: Model): void { + if (!this.filePath) { + throw new Error('invalid file path, file path cannot be empty'); + } + let result = ''; + + const pList = model.model.get('p'); + if (!pList) { + return; + } + pList.forEach(n => { + n.policy.forEach(m => { + result += n.key + ', '; + result += arrayToString([...m.values()]); + result += '\n'; + }); + }); + + const gList = model.model.get('g'); + if (!gList) { + return; + } + gList.forEach(n => { + n.policy.forEach(m => { + result += n.key + ', '; + result += arrayToString([...m.values()]); + result += '\n'; + }); + }); + + this.savePolicyFile(result.trim()); + } + + private savePolicyFile(text: string) { + writeFileSync(this.filePath, text); + } + + /** + * removePolicy removes a policy rule from the storage. + */ + public removePolicy(sec: string, ptype: string, rule: string[]): void { + throw new Error('not implemented'); + } + + /** + * removeFilteredPolicy removes policy rules that match the filter from the storage. + */ + public removeFilteredPolicy( + sec: string, + ptype: string, + fieldIndex: number, + ...fieldValues: string[] + ): void { + throw new Error('not implemented'); + } +} diff --git a/src/persist/filteredAdapter.ts b/src/persist/filteredAdapter.ts new file mode 100644 index 00000000..dda17cc2 --- /dev/null +++ b/src/persist/filteredAdapter.ts @@ -0,0 +1,9 @@ +import { Model } from '../model'; +import { Adapter } from './adapter'; + +export interface FilterAdapter extends Adapter { + // loadFilteredPolicy loads only policy rules that match the filter. + loadFilteredPolicy(model: Model, filter: any): void; + // isFiltered returns true if the loaded policy has been filtered. + isFiltered(): boolean; +} diff --git a/src/persist/helper.ts b/src/persist/helper.ts new file mode 100644 index 00000000..ac60bc13 --- /dev/null +++ b/src/persist/helper.ts @@ -0,0 +1,28 @@ +import { Model } from '../model'; + +export class Helper { + public static loadPolicyLine(line: string, model: Model) { + if (line) { + return; + } + + if (line.charAt(0) === '#') { + return; + } + + const tokens = line.split(', '); + + const key = tokens[0]; + const sec = key.substring(0, 1); + const item = model.model.get(sec); + if (!item) { + return; + } + const policy = item.get(key); + + if (!policy) { + return; + } + policy.policy.push(tokens.slice(1)); + } +} diff --git a/src/persist/index.ts b/src/persist/index.ts new file mode 100644 index 00000000..d3a43520 --- /dev/null +++ b/src/persist/index.ts @@ -0,0 +1,6 @@ +export * from './adapter'; +export * from './fileAdapter'; +export * from './helper'; +export * from './watcher'; +export * from './filteredAdapter'; +export * from './defaultFilteredAdapter'; diff --git a/src/persist/watcher.ts b/src/persist/watcher.ts new file mode 100644 index 00000000..b2b6d9c9 --- /dev/null +++ b/src/persist/watcher.ts @@ -0,0 +1,19 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +export interface Watcher { + setUpdateCallback(cb: () => void): void; + + update(): boolean; +} From 8075a7f10e1c2eab32f3efd91ac42c8a024c4ca5 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sat, 28 Jul 2018 13:27:58 +0800 Subject: [PATCH 054/497] :pencil2: fix typo --- src/persist/defaultFilteredAdapter.ts | 4 ++-- src/persist/filteredAdapter.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 8c29b184..66721204 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -1,4 +1,4 @@ -import { FilterAdapter } from './filteredAdapter'; +import { FilteredAdapter } from './filteredAdapter'; import { Model } from '../model'; import { FileAdapter } from './fileAdapter'; import { Adapter } from './adapter'; @@ -11,7 +11,7 @@ export class Filter { } export class DefaultFilteredAdapter extends FileAdapter - implements FilterAdapter { + implements FilteredAdapter { private filtered: boolean; constructor(filePath: string) { diff --git a/src/persist/filteredAdapter.ts b/src/persist/filteredAdapter.ts index dda17cc2..9555cd16 100644 --- a/src/persist/filteredAdapter.ts +++ b/src/persist/filteredAdapter.ts @@ -1,7 +1,7 @@ import { Model } from '../model'; import { Adapter } from './adapter'; -export interface FilterAdapter extends Adapter { +export interface FilteredAdapter extends Adapter { // loadFilteredPolicy loads only policy rules that match the filter. loadFilteredPolicy(model: Model, filter: any): void; // isFiltered returns true if the loaded policy has been filtered. From 6839b90fc0d1f9f0fb0ab0609f7074b82ffe5057 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sat, 28 Jul 2018 13:28:34 +0800 Subject: [PATCH 055/497] :art: improve code statement --- src/enforcer.ts | 63 ++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 73106940..4364df66 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -15,8 +15,9 @@ import * as util from './util'; import { Model, FunctionMap } from './model'; import { Effector, DefaultEffector } from './effect'; -import { IAdapter, Adapter, FilteredAdapter } from './persist'; -import { IWatcher, Watcher } from './persist'; +import { Adapter, FileAdapter } from './persist'; +import { DefaultFilteredAdapter } from './persist'; +import { Watcher } from './persist'; import { RoleManager, DefaultRoleManager } from './rbac'; // Enforcer is the main interface for authorization enforcement and policy management. @@ -26,8 +27,8 @@ export class Enforcer { private fm: Map; public eft: Effector; - private adapter: IAdapter; - private watcher: IWatcher; + private adapter: Adapter; + // private watcher: IWatcher; public rm: RoleManager; public enabled: boolean; @@ -43,8 +44,8 @@ export class Enforcer { this.fm = new Map(); this.eft = new DefaultEffector(); - this.adapter = new Adapter(); - this.watcher = new Watcher(); + this.adapter = new FileAdapter(''); + // this.watcher = new Watcher(); this.rm = new DefaultRoleManager(0); this.enabled = false; @@ -88,7 +89,7 @@ export class Enforcer { if (typeof params[0] === 'string') { e.initWithFile(params[0].toString, ''); } else { - e.initWithModelAndAdapter(params[0], null); + e.initWithModelAndAdapter(params[0], new FileAdapter('')); } } else if (params.length === parsedParamLen) { e.initWithFile('', ''); @@ -101,13 +102,13 @@ export class Enforcer { // initWithFile initializes an enforcer with a model file and a policy file. public initWithFile(modelPath: string, policyPath: string): void { - const a = Adapter.NewAdapter(policyPath); + const a = new FileAdapter(policyPath); this.initWithAdapter(modelPath, a); } // initWithAdapter initializes an enforcer with a database adapter. public initWithAdapter(modelPath: string, adapter: Adapter): void { - const m = this.newModel(modelPath, ''); + const m = Enforcer.newModel(modelPath, ''); this.initWithModelAndAdapter(m, adapter); this.modelPath = modelPath; @@ -116,7 +117,7 @@ export class Enforcer { // initWithModelAndAdapter initializes an enforcer with a model and a database adapter. public initWithModelAndAdapter(m: Model, adapter: Adapter): void { this.adapter = adapter; - this.watcher = null; + // this.watcher = new Watcher(); this.model = m; this.model.printModel(); @@ -136,7 +137,7 @@ export class Enforcer { this.autoBuildRoleLinks = true; } - public newModel(...text: string[]): Model { + public static newModel(...text: string[]): Model { const m = new Model(); if (text.length === 2) { @@ -156,7 +157,7 @@ export class Enforcer { // Because the policy is attached to a model, // so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). public loadModel(): void { - this.model = this.newModel(); + this.model = Enforcer.newModel(); this.model.loadModel(this.modelPath); this.model.printModel(); this.fm = FunctionMap.loadFunctionMap(); @@ -185,12 +186,12 @@ export class Enforcer { // setWatcher sets the current watcher. public setWatcher(watcher: Watcher): void { - this.watcher = watcher; - // error intentionally ignored - const func = (): void => { - this.loadPolicy(); - }; - watcher.SetUpdateCallback(func); + // this.watcher = watcher; + // // error intentionally ignored + // const func = (): void => { + // this.loadPolicy(); + // }; + // watcher.setUpdateCallback(func); } // setRoleManager sets the current role manager. @@ -226,10 +227,10 @@ export class Enforcer { public loadFilteredPolicy(filter: any): boolean { this.model.clearPolicy(); - let filteredAdapter = new FilteredAdapter(); + let filteredAdapter = new DefaultFilteredAdapter(''); // Attempt to cast the Adapter as a FilteredAdapter - if (FilteredAdapter instanceof this.adapter) { + if (filteredAdapter instanceof this.adapter) { filteredAdapter = this.adapter; } else { throw new Error('filtered policies are not supported by this adapter'); @@ -247,7 +248,8 @@ export class Enforcer { // isFiltered returns true if the loaded policy has been filtered. public isFiltered(): boolean { - if (!(FilteredAdapter instanceof this.adapter)) { + const filteredAdapter = new DefaultFilteredAdapter(''); + if (!(filteredAdapter instanceof this.adapter)) { return false; } return this.adapter.isFiltered(); @@ -261,9 +263,9 @@ export class Enforcer { if (!this.adapter.savePolicy(this.model)) { return false; } - if (!this.watcher) { - return this.watcher.update(); - } + // if (!this.watcher) { + // return this.watcher.update(); + // } return true; } @@ -274,8 +276,8 @@ export class Enforcer { } // enableLog changes whether to print Casbin log to the standard output. - public enableLog(enable: boolean): void { - // util.enableLog = enable; + public static enableLog(enable: boolean): void { + util.enableLog = enable; } // enableAutoSave controls whether to save a policy rule automatically to @@ -300,10 +302,11 @@ export class Enforcer { // Enforce decides whether a "subject" can access a "object" with the // operation "action", input parameters are usually: (sub, obj, act). public enforce(...rvals: any[]): boolean { - if (!this.enabled) { - return true; - } - return false; + return !this.enabled; + + // if (!this.enabled) { + // return true; + // } // functions := make(map[string]govaluatthis.ExpressionFunction) // for key, function := range this.fm { From b4a309e82172b8c39decde75f94e415324a910f9 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 28 Jul 2018 13:41:13 +0800 Subject: [PATCH 056/497] :sparkles: Add setEnableLog method --- src/util/log.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/util/log.ts b/src/util/log.ts index 74f10f1a..5a12f4cb 100644 --- a/src/util/log.ts +++ b/src/util/log.ts @@ -13,7 +13,7 @@ // limitations under the License. // enableLog controls whether to print log to console. -const enableLog = true; +let enableLog = false; // logPrint prints the log. const logPrint: (...v: any[]) => void = (...v: any[]): void => { @@ -32,4 +32,8 @@ const logPrintf: (format: string, ...v: any[]) => void = ( } }; -export { logPrint, logPrintf }; +function setEnableLog(val: boolean) { + enableLog = val; +} + +export { logPrint, logPrintf, setEnableLog }; From dc20c9c1bb6208d091ef1b853ef5993d4367d1d1 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sat, 28 Jul 2018 19:31:51 +0800 Subject: [PATCH 057/497] :ambulance: use setEnableLog function from log util's fix --- src/enforcer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 4364df66..a21a0d88 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -276,8 +276,8 @@ export class Enforcer { } // enableLog changes whether to print Casbin log to the standard output. - public static enableLog(enable: boolean): void { - util.enableLog = enable; + public enableLog(enable: boolean): void { + util.setEnableLog(enable); } // enableAutoSave controls whether to save a policy rule automatically to From 381b73450fcabe9bd7ee8b24aa5713bea728d17e Mon Sep 17 00:00:00 2001 From: nodece Date: Sun, 29 Jul 2018 17:52:04 +0800 Subject: [PATCH 058/497] :heavy_plus_sign: Add jest test dependency --- package.json | 18 + yarn.lock | 2321 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 2314 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index 9c060d47..4884c415 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,11 @@ }, "devDependencies": { "@types/ip": "^0.0.31", + "@types/jest": "^23.3.1", "@types/lodash": "^4.14.113", "@types/node": "^10.5.3", "husky": "^0.14.3", + "jest": "^23.4.2", "lint-staged": "^7.2.0", "prettier": "^1.13.7", "rollup": "^0.62.0", @@ -45,5 +47,21 @@ "prettier --write", "git add" ] + }, + "jest": { + "testURL": "http://localhost", + "testPathIgnorePatterns": [ + "/node_modules/", + "/\\./" + ], + "testRegex": "(test/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node" + ] } } diff --git a/yarn.lock b/yarn.lock index 18e4a136..408bc50f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,20 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.55" + resolved "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.55.tgz#71f530e7b010af5eb7a7df7752f78921dd57e9ee" + dependencies: + "@babel/highlight" "7.0.0-beta.55" + +"@babel/highlight@7.0.0-beta.55": + version "7.0.0-beta.55" + resolved "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.55.tgz#988653647d629c261dae156e74d5f0252ba520c0" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "http://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" @@ -18,6 +32,10 @@ dependencies: "@types/node" "*" +"@types/jest@^23.3.1": + version "23.3.1" + resolved "http://registry.npm.taobao.org/@types/jest/download/@types/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf" + "@types/lodash@^4.14.113": version "4.14.113" resolved "http://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.113.tgz#1d1cb063f17fec4cc46f1a90d978ebf441113061" @@ -30,10 +48,57 @@ version "10.5.3" resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.5.3.tgz#5bcfaf088ad17894232012877669634c06b20cc5" +abab@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/abab/download/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abab@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/abab/download/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + +abbrev@1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +acorn-globals@^4.1.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + +acorn@^5.0.0, acorn@^5.5.3: + version "5.7.1" + resolved "http://registry.npm.taobao.org/acorn/download/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" + +ajv@^5.1.0: + version "5.5.2" + resolved "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + ansi-escapes@^1.0.0: version "1.4.0" resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + ansi-regex@^2.0.0: version "2.1.1" resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -56,21 +121,51 @@ any-observable@^0.3.0: version "0.3.0" resolved "http://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" +anymatch@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + app-root-path@^2.0.1: version "2.1.0" resolved "http://registry.npm.taobao.org/app-root-path/download/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" +append-transform@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/append-transform/download/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + dependencies: + default-require-extensions "^2.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: sprintf-js "~1.0.2" +arr-diff@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + arr-diff@^4.0.0: version "4.0.0" resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" -arr-flatten@^1.1.0: +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" @@ -78,19 +173,69 @@ arr-union@^3.1.0: version "3.1.0" resolved "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" +array-equal@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-unique@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + array-unique@^0.3.2: version "0.3.2" resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" +arrify@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1@~0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + assign-symbols@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" +astral-regex@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@^1.4.0: + version "1.5.2" + resolved "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.6.1" + resolved "http://registry.npm.taobao.org/async/download/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + dependencies: + lodash "^4.17.10" + +asynckit@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + atob@^2.1.1: version "2.1.1" resolved "http://registry.npm.taobao.org/atob/download/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" -babel-code-frame@^6.22.0: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.6.0: + version "1.7.0" + resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -98,6 +243,143 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-core@^6.0.0, babel-core@^6.26.0: + version "6.26.3" + resolved "http://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.1" + resolved "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "http://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/babel-jest/download/babel-jest-23.4.2.tgz#f276de67798a5d68f2d6e87ff518c2f6e1609877" + dependencies: + babel-plugin-istanbul "^4.1.6" + babel-preset-jest "^23.2.0" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.1.6: + version "4.1.6" + resolved "http://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" + +babel-plugin-syntax-object-rest-spread@^6.13.0: + version "6.13.0" + resolved "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-preset-jest@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" + dependencies: + babel-plugin-jest-hoist "^23.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + balanced-match@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -114,6 +396,12 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + dependencies: + tweetnacl "^0.14.3" + brace-expansion@^1.1.7: version "1.1.11" resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -121,6 +409,14 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^1.8.2: + version "1.8.5" + resolved "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + braces@^2.3.1: version "2.3.2" resolved "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -136,7 +432,27 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -builtin-modules@^1.1.1: +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + dependencies: + resolve "1.1.7" + +bser@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/bser/download/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" + +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -158,6 +474,35 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +callsites@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase@^1.0.2: + version "1.2.1" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^4.1.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +capture-exit@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/capture-exit/download/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" + +caseless@~0.12.0: + version "0.12.0" + resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -168,7 +513,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: version "2.4.1" resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -176,6 +521,10 @@ chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chownr@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/chownr/download/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + ci-info@^1.0.0: version "1.1.3" resolved "http://registry.npm.taobao.org/ci-info/download/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" @@ -206,6 +555,26 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" +cliui@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^4.0.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + code-point-at@^1.0.0: version "1.1.0" resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -227,10 +596,20 @@ color-name@1.1.1: version "1.1.1" resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" +combined-stream@1.0.6, combined-stream@~1.0.5: + version "1.0.6" + resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: version "2.16.0" resolved "http://registry.npm.taobao.org/commander/download/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" +compare-versions@^3.1.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/compare-versions/download/compare-versions-3.3.0.tgz#af93ea705a96943f622ab309578b9b90586f39c3" + component-emitter@^1.2.1: version "1.2.1" resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -239,10 +618,26 @@ concat-map@0.0.1: version "0.0.1" resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.5.1" + resolved "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + copy-descriptor@^0.1.0: version "0.1.1" resolved "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.7" + resolved "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + cosmiconfig@^5.0.2: version "5.0.5" resolved "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" @@ -259,11 +654,35 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.4" + resolved "http://registry.npm.taobao.org/cssom/download/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + +cssstyle@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/cssstyle/download/cssstyle-1.0.0.tgz#79b16d51ec5591faec60e688891f15d2a5705129" + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/data-urls/download/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" + dependencies: + abab "^1.0.4" + whatwg-mimetype "^2.0.0" + whatwg-url "^6.4.0" + date-fns@^1.27.2: version "1.29.0" resolved "http://registry.npm.taobao.org/date-fns/download/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" -debug@^2.2.0, debug@^2.3.3: +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -275,6 +694,10 @@ debug@^3.1.0: dependencies: ms "2.0.0" +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + decode-uri-component@^0.2.0: version "0.2.0" resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -283,6 +706,27 @@ dedent@^0.7.0: version "0.7.0" resolved "http://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" +deep-extend@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +deep-is@~0.1.3: + version "0.1.3" + resolved "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + dependencies: + strip-bom "^3.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + define-property@^0.2.5: version "0.2.5" resolved "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -302,32 +746,121 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "http://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-newline@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + diff@^3.2.0: version "3.5.0" resolved "http://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +domexception@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + elegant-spinner@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" -error-ex@^1.3.1: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" +es-abstract@^1.5.1: + version "1.12.0" + resolved "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +escodegen@^1.9.1: + version "1.11.0" + resolved "http://registry.npm.taobao.org/escodegen/download/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^3.1.3: + version "3.1.3" + resolved "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + esprima@^4.0.0: version "4.0.1" resolved "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" +estraverse@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + esutils@^2.0.2: version "2.0.2" resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" +exec-sh@^0.2.0: + version "0.2.2" + resolved "http://registry.npm.taobao.org/exec-sh/download/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + dependencies: + merge "^1.2.0" + +execa@^0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.9.0: version "0.9.0" resolved "http://registry.npm.taobao.org/execa/download/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" @@ -344,6 +877,16 @@ exit-hook@^1.0.0: version "1.1.1" resolved "http://registry.npm.taobao.org/exit-hook/download/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" +exit@^0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -356,6 +899,23 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-range@^1.8.1: + version "1.8.2" + resolved "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expect@^23.4.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/expect/download/expect-23.4.0.tgz#6da4ecc99c1471253e7288338983ad1ebadb60c3" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^23.2.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^23.2.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -369,6 +929,16 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +extend@~3.0.1: + version "3.0.2" + resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + +extglob@^0.3.1: + version "0.3.2" + resolved "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + extglob@^2.0.4: version "2.0.4" resolved "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -382,6 +952,32 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extsprintf@1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + figures@^1.7.0: version "1.7.0" resolved "http://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -389,6 +985,27 @@ figures@^1.7.0: escape-string-regexp "^1.0.5" object-assign "^4.1.0" +filename-regex@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "http://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.4" + resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + fill-range@^4.0.0: version "4.0.0" resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -402,10 +1019,45 @@ find-parent-dir@^0.3.0: version "0.3.0" resolved "http://registry.npm.taobao.org/find-parent-dir/download/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" -for-in@^1.0.2: +find-up@^1.0.0: + version "1.1.2" + resolved "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" +for-own@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "http://registry.npm.taobao.org/foreach/download/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.3.1: + version "2.3.2" + resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + fragment-cache@^0.2.1: version "0.2.1" resolved "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -420,10 +1072,44 @@ fs-extra@^7.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^1.2.5: + version "1.2.5" + resolved "http://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + fs.realpath@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +fsevents@^1.2.3: + version "1.2.4" + resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + get-own-enumerable-property-symbols@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" @@ -436,9 +1122,28 @@ get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" -glob@^7.1.1: - version "7.1.2" - resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +getpass@^0.1.1: + version "0.1.7" + resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.2" + resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -447,20 +1152,57 @@ glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6: +globals@^9.18.0: + version "9.18.0" + resolved "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +growly@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handlebars@^4.0.3: + version "4.0.11" + resolved "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.0.3: + version "5.0.3" + resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" +has-flag@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + has-flag@^3.0.0: version "3.0.0" resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" +has-unicode@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + has-value@^0.3.1: version "0.3.1" resolved "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -488,6 +1230,37 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has@^1.0.1: + version "1.0.3" + resolved "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + dependencies: + function-bind "^1.1.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + husky@^0.14.3: version "0.14.3" resolved "http://registry.npm.taobao.org/husky/download/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" @@ -496,6 +1269,33 @@ husky@^0.14.3: normalize-path "^1.0.0" strip-indent "^2.0.0" +iconv-lite@0.4.19: + version "0.4.19" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +iconv-lite@^0.4.4: + version "0.4.23" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +import-local@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + indent-string@^2.1.0: version "2.1.0" resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -513,10 +1313,24 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@~2.0.3: version "2.0.3" resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +ini@~1.3.0: + version "1.3.5" + resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +invariant@^2.2.2: + version "2.2.4" + resolved "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -541,6 +1355,16 @@ is-buffer@^1.1.5: version "1.1.6" resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.4" + resolved "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + is-ci@^1.0.10: version "1.1.0" resolved "http://registry.npm.taobao.org/is-ci/download/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" @@ -559,6 +1383,10 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-date-object@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-descriptor@^0.1.0: version "0.1.6" resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -579,6 +1407,16 @@ is-directory@^0.3.1: version "0.3.1" resolved "http://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" +is-dotfile@^1.0.0: + version "1.0.3" + resolved "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -589,6 +1427,10 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extglob@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + is-extglob@^2.1.1: version "2.1.1" resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -605,6 +1447,20 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-generator-fn/download/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + is-glob@^4.0.0: version "4.0.0" resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" @@ -615,12 +1471,22 @@ is-module@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/is-module/download/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" +is-number@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + is-number@^3.0.0: version "3.0.0" resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + is-obj@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -637,10 +1503,24 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + is-promise@^2.1.0: version "2.1.0" resolved "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" +is-regex@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + is-regexp@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -649,11 +1529,23 @@ is-stream@^1.1.0: version "1.1.0" resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-symbol@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + is-windows@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" -isarray@1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -671,11 +1563,333 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" +isstream@~0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.3.1: + version "1.3.1" + resolved "http://registry.npm.taobao.org/istanbul-api/download/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" + dependencies: + async "^2.1.4" + compare-versions "^3.1.0" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-hook "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-report "^1.1.4" + istanbul-lib-source-maps "^1.2.4" + istanbul-reports "^1.3.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" + +istanbul-lib-hook@^1.2.0: + version "1.2.1" + resolved "http://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" + dependencies: + append-transform "^1.0.0" + +istanbul-lib-instrument@^1.10.1: + version "1.10.1" + resolved "http://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.4: + version "1.1.4" + resolved "http://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" + dependencies: + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.4: + version "1.2.5" + resolved "http://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" + dependencies: + throat "^4.0.0" + +jest-cli@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-cli/download/jest-cli-23.4.2.tgz#49d56bcfe6cf01871bfcc4a0494e08edaf2b61d0" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.3.1" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-source-maps "^1.2.4" + jest-changed-files "^23.4.2" + jest-config "^23.4.2" + jest-environment-jsdom "^23.4.0" + jest-get-type "^22.1.0" + jest-haste-map "^23.4.1" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve-dependencies "^23.4.2" + jest-runner "^23.4.2" + jest-runtime "^23.4.2" + jest-snapshot "^23.4.2" + jest-util "^23.4.0" + jest-validate "^23.4.0" + jest-watcher "^23.4.0" + jest-worker "^23.2.0" + micromatch "^2.3.11" + node-notifier "^5.2.1" + prompts "^0.1.9" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^11.0.0" + +jest-config@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-config/download/jest-config-23.4.2.tgz#62a105e14b8266458f2bf4d32403b2c44418fa77" + dependencies: + babel-core "^6.0.0" + babel-jest "^23.4.2" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^23.4.0" + jest-environment-node "^23.4.0" + jest-get-type "^22.1.0" + jest-jasmine2 "^23.4.2" + jest-regex-util "^23.3.0" + jest-resolve "^23.4.1" + jest-util "^23.4.0" + jest-validate "^23.4.0" + pretty-format "^23.2.0" + +jest-diff@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/jest-diff/download/jest-diff-23.2.0.tgz#9f2cf4b51e12c791550200abc16b47130af1062a" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^23.2.0" + +jest-docblock@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/jest-docblock/download/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" + dependencies: + detect-newline "^2.1.0" + +jest-each@^23.4.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/jest-each/download/jest-each-23.4.0.tgz#2fa9edd89daa1a4edc9ff9bf6062a36b71345143" + dependencies: + chalk "^2.0.1" + pretty-format "^23.2.0" + +jest-environment-jsdom@^23.4.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + jsdom "^11.5.1" + +jest-environment-node@^23.4.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + jest-get-type@^22.1.0: version "22.4.3" resolved "http://registry.npm.taobao.org/jest-get-type/download/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" -jest-validate@^23.0.0: +jest-haste-map@^23.4.1: + version "23.4.1" + resolved "http://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-23.4.1.tgz#43a174ba7ac079ae1dd74eaf5a5fe78989474dd2" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^23.2.0" + jest-serializer "^23.0.1" + jest-worker "^23.2.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-23.4.2.tgz#2fbf52f93e43ed4c5e7326a90bb1d785be4321ac" + dependencies: + babel-traverse "^6.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^23.4.0" + is-generator-fn "^1.0.0" + jest-diff "^23.2.0" + jest-each "^23.4.0" + jest-matcher-utils "^23.2.0" + jest-message-util "^23.4.0" + jest-snapshot "^23.4.2" + jest-util "^23.4.0" + pretty-format "^23.2.0" + +jest-leak-detector@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-23.2.0.tgz#c289d961dc638f14357d4ef96e0431ecc1aa377d" + dependencies: + pretty-format "^23.2.0" + +jest-matcher-utils@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-23.2.0.tgz#4d4981f23213e939e3cedf23dc34c747b5ae1913" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^23.2.0" + +jest-message-util@^23.4.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/jest-message-util/download/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/jest-mock/download/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" + +jest-regex-util@^23.3.0: + version "23.3.0" + resolved "http://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" + +jest-resolve-dependencies@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-23.4.2.tgz#0675ba876a5b819deffc449ad72e9985c2592048" + dependencies: + jest-regex-util "^23.3.0" + jest-snapshot "^23.4.2" + +jest-resolve@^23.4.1: + version "23.4.1" + resolved "http://registry.npm.taobao.org/jest-resolve/download/jest-resolve-23.4.1.tgz#7f3c17104732a2c0c940a01256025ed745814982" + dependencies: + browser-resolve "^1.11.3" + chalk "^2.0.1" + realpath-native "^1.0.0" + +jest-runner@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-runner/download/jest-runner-23.4.2.tgz#579a88524ac52c846075b0129a21c7b483e75a7e" + dependencies: + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^23.4.2" + jest-docblock "^23.2.0" + jest-haste-map "^23.4.1" + jest-jasmine2 "^23.4.2" + jest-leak-detector "^23.2.0" + jest-message-util "^23.4.0" + jest-runtime "^23.4.2" + jest-util "^23.4.0" + jest-worker "^23.2.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-runtime/download/jest-runtime-23.4.2.tgz#00c3bb8385253d401a394a27d1112d3615e5a65c" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.1.6" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.11" + jest-config "^23.4.2" + jest-haste-map "^23.4.1" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.4.1" + jest-snapshot "^23.4.2" + jest-util "^23.4.0" + jest-validate "^23.4.0" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^11.0.0" + +jest-serializer@^23.0.1: + version "23.0.1" + resolved "http://registry.npm.taobao.org/jest-serializer/download/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" + +jest-snapshot@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-23.4.2.tgz#8fa6130feb5a527dac73e5fa80d86f29f7c42ab6" + dependencies: + babel-types "^6.0.0" + chalk "^2.0.1" + jest-diff "^23.2.0" + jest-matcher-utils "^23.2.0" + jest-message-util "^23.4.0" + jest-resolve "^23.4.1" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^23.2.0" + semver "^5.5.0" + +jest-util@^23.4.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/jest-util/download/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^23.4.0" + mkdirp "^0.5.1" + slash "^1.0.0" + source-map "^0.6.0" + +jest-validate@^23.0.0, jest-validate@^23.4.0: version "23.4.0" resolved "http://registry.npm.taobao.org/jest-validate/download/jest-validate-23.4.0.tgz#d96eede01ef03ac909c009e9c8e455197d48c201" dependencies: @@ -684,10 +1898,35 @@ jest-validate@^23.0.0: leven "^2.1.0" pretty-format "^23.2.0" -js-tokens@^3.0.2: +jest-watcher@^23.4.0: + version "23.4.0" + resolved "http://registry.npm.taobao.org/jest-watcher/download/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + string-length "^2.0.0" + +jest-worker@^23.2.0: + version "23.2.0" + resolved "http://registry.npm.taobao.org/jest-worker/download/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" + dependencies: + merge-stream "^1.0.1" + +jest@^23.4.2: + version "23.4.2" + resolved "http://registry.npm.taobao.org/jest/download/jest-23.4.2.tgz#1fae3ed832192143070ae85156b25cea891a1260" + dependencies: + import-local "^1.0.0" + jest-cli "^23.4.2" + +js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.12.0" resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" @@ -695,16 +1934,80 @@ js-yaml@^3.7.0, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" +jsbn@~0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^11.5.1: + version "11.12.0" + resolved "http://registry.npm.taobao.org/jsdom/download/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.1: + version "0.5.1" + resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + jsonfile@^4.0.0: version "4.0.0" resolved "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" optionalDependencies: graceful-fs "^4.1.6" +jsprim@^1.2.2: + version "1.4.1" + resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -725,10 +2028,35 @@ kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" +kleur@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/kleur/download/kleur-2.0.1.tgz#7cc64b0d188d0dcbc98bdcdfdda2cc10619ddce8" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +left-pad@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/left-pad/download/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + leven@^2.1.0: version "2.1.0" resolved "http://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" +levn@~0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + lint-staged@^7.2.0: version "7.2.0" resolved "http://registry.npm.taobao.org/lint-staged/download/lint-staged-7.2.0.tgz#bdf4bb7f2f37fe689acfaec9999db288a5b26888" @@ -804,7 +2132,28 @@ listr@^0.14.1: rxjs "^6.1.0" strip-ansi "^3.0.1" -lodash@^4.17.10, lodash@^4.17.5: +load-json-file@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: version "4.17.10" resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -827,6 +2176,16 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" +longest@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lru-cache@^4.0.1: version "4.1.3" resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" @@ -834,6 +2193,12 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +makeerror@1.0.x: + version "1.0.11" + resolved "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + map-cache@^0.2.2: version "0.2.2" resolved "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -844,7 +2209,45 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -micromatch@^3.1.8: +math-random@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/math-random/download/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + +mem@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/merge-stream/download/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + +merge@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/merge/download/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.3.11: + version "2.3.11" + resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" dependencies: @@ -862,12 +2265,51 @@ micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" -minimatch@^3.0.4: +mime-db@~1.35.0: + version "1.35.0" + resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" + +mime-types@^2.1.12, mime-types@~2.1.17: + version "2.1.19" + resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" + dependencies: + mime-db "~1.35.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" +minimist@0.0.8: + version "0.0.8" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.3" + resolved "http://registry.npm.taobao.org/minipass/download/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/minizlib/download/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" + mixin-deep@^1.2.0: version "1.3.1" resolved "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -875,10 +2317,20 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + ms@2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +nan@^2.9.2: + version "2.10.0" + resolved "http://registry.npm.taobao.org/nan/download/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + nanomatch@^1.2.9: version "1.2.13" resolved "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -895,10 +2347,83 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +natural-compare@^1.4.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +needle@^2.2.1: + version "2.2.1" + resolved "http://registry.npm.taobao.org/needle/download/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +node-int64@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.2.1: + version "5.2.1" + resolved "http://registry.npm.taobao.org/node-notifier/download/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.3" + resolved "http://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" + +npm-packlist@^1.1.6: + version "1.1.11" + resolved "http://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-path@^2.0.2: version "2.0.4" resolved "http://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" @@ -919,10 +2444,27 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" +npmlog@^4.0.2: + version "4.1.2" + resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + number-is-nan@^1.0.0: version "1.0.1" resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +nwsapi@^2.0.7: + version "2.0.7" + resolved "http://registry.npm.taobao.org/nwsapi/download/nwsapi-2.0.7.tgz#6fc54c254621f10cac5225b76e81c74120139b78" + +oauth-sign@~0.8.2: + version "0.8.2" + resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -935,19 +2477,37 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-keys@^1.0.8: + version "1.0.12" + resolved "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + object-visit@^1.0.0: version "1.0.1" resolved "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" dependencies: isobject "^3.0.0" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + object.pick@^1.3.0: version "1.3.0" resolved "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: isobject "^3.0.1" -once@^1.3.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -957,6 +2517,24 @@ onetime@^1.0.0: version "1.1.0" resolved "http://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" +optimist@^0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + ora@^0.2.3: version "0.2.3" resolved "http://registry.npm.taobao.org/ora/download/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" @@ -966,14 +2544,68 @@ ora@^0.2.3: cli-spinners "^0.1.2" object-assign "^4.0.1" +os-homedir@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-limit@^1.1.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + p-map@^1.1.1: version "1.2.0" resolved "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" +p-try@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + parse-json@^4.0.0: version "4.0.0" resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -981,11 +2613,25 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse5@4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + pascalcase@^0.1.1: version "0.1.1" resolved "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" -path-is-absolute@^1.0.0: +path-exists@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -1001,20 +2647,64 @@ path-parse@^1.0.5: version "1.0.5" resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-type@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + pify@^3.0.0: version "3.0.0" resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.0.2: version "3.1.1" resolved "http://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" dependencies: semver-compare "^1.0.0" +pn@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + posix-character-classes@^0.1.0: version "0.1.1" resolved "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + prettier@^1.13.7: version "1.13.7" resolved "http://registry.npm.taobao.org/prettier/download/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" @@ -1026,10 +2716,101 @@ pretty-format@^23.2.0: ansi-regex "^3.0.0" ansi-styles "^3.2.0" +private@^0.1.8: + version "0.1.8" + resolved "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +prompts@^0.1.9: + version "0.1.13" + resolved "http://registry.npm.taobao.org/prompts/download/prompts-0.1.13.tgz#7fad7ee1c6cafe49834ca0b2a6a471262de57620" + dependencies: + kleur "^2.0.1" + sisteransi "^0.1.1" + pseudomap@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24: + version "1.1.28" + resolved "http://registry.npm.taobao.org/psl/download/psl-1.1.28.tgz#4fb6ceb08a1e2214d4fd4de0ca22dae13740bc7b" + +punycode@^1.4.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + +qs@~6.5.1: + version "6.5.2" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +randomatic@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/randomatic/download/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +rc@^1.2.7: + version "1.2.8" + resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.6: + version "2.3.6" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +realpath-native@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/realpath-native/download/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633" + dependencies: + util.promisify "^1.0.0" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -1037,11 +2818,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + repeat-element@^1.1.2: version "1.1.2" resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^1.6.1: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -1051,10 +2836,71 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@^2.87.0: + version "2.87.0" + resolved "http://registry.npm.taobao.org/request/download/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + resolve-url@^0.2.1: version "0.2.1" resolved "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" +resolve@1.1.7: + version "1.1.7" + resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolve@^1.1.6, resolve@^1.3.2: version "1.8.1" resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" @@ -1072,6 +2918,18 @@ ret@~0.1.10: version "0.1.15" resolved "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" +right-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.2" + resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + rollup-plugin-node-resolve@^3.3.0: version "3.3.0" resolved "http://registry.npm.taobao.org/rollup-plugin-node-resolve/download/rollup-plugin-node-resolve-3.3.0.tgz#c26d110a36812cbefa7ce117cadcd3439aa1c713" @@ -1087,26 +2945,61 @@ rollup@^0.62.0: "@types/estree" "0.0.39" "@types/node" "*" +rsvp@^3.3.3: + version "3.6.2" + resolved "http://registry.npm.taobao.org/rsvp/download/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + rxjs@^6.1.0: version "6.2.2" resolved "http://registry.npm.taobao.org/rxjs/download/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" dependencies: tslib "^1.9.0" +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + safe-regex@^1.1.0: version "1.1.0" resolved "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: ret "~0.1.10" +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sane@^2.0.0: + version "2.5.2" + resolved "http://registry.npm.taobao.org/sane/download/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + +sax@^1.2.4: + version "1.2.4" + resolved "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + semver-compare@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" -semver@^5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + set-value@^0.4.3: version "0.4.3" resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" @@ -1135,10 +3028,22 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -signal-exit@^3.0.0: +shellwords@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +sisteransi@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/sisteransi/download/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" + +slash@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + slice-ansi@0.0.4: version "0.0.4" resolved "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" @@ -1180,14 +3085,59 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.4.15: + version "0.4.18" + resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.6: + version "0.5.6" + resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@^0.5.6: +source-map@^0.4.4: + version "0.4.4" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -1198,6 +3148,25 @@ sprintf-js@~1.0.2: version "1.0.3" resolved "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +sshpk@^1.7.0: + version "1.14.2" + resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + safer-buffer "^2.0.2" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + staged-git-files@1.1.1: version "1.1.1" resolved "http://registry.npm.taobao.org/staged-git-files/download/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" @@ -1209,10 +3178,21 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + string-argv@^0.0.2: version "0.0.2" resolved "http://registry.npm.taobao.org/string-argv/download/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" +string-length@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/string-length/download/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + string-width@^1.0.1: version "1.0.2" resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -1221,6 +3201,19 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + stringify-object@^3.2.2: version "3.2.2" resolved "http://registry.npm.taobao.org/stringify-object/download/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" @@ -1235,6 +3228,22 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + strip-eof@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -1243,10 +3252,20 @@ strip-indent@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + supports-color@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" +supports-color@^3.1.2: + version "3.2.3" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + supports-color@^5.3.0: version "5.4.0" resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" @@ -1257,6 +3276,44 @@ symbol-observable@^1.1.0: version "1.2.0" resolved "http://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" +symbol-tree@^3.2.2: + version "3.2.2" + resolved "http://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +tar@^4: + version "4.4.4" + resolved "http://registry.npm.taobao.org/tar/download/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.3.3" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +test-exclude@^4.2.1: + version "4.2.1" + resolved "http://registry.npm.taobao.org/test-exclude/download/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" + dependencies: + arrify "^1.0.1" + micromatch "^3.1.8" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^4.0.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + +tmpl@1.0.x: + version "1.0.4" + resolved "http://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + to-object-path@^0.3.0: version "0.3.0" resolved "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -1279,6 +3336,29 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +tough-cookie@>=2.3.3, tough-cookie@^2.3.4: + version "2.4.3" + resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tough-cookie@~2.3.3: + version "2.3.4" + resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -1306,10 +3386,39 @@ tsutils@^2.27.2: dependencies: tslib "^1.8.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + typescript@^2.9.2: version "2.9.2" resolved "http://registry.npm.taobao.org/typescript/download/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" +uglify-js@^2.6: + version "2.8.29" + resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + union-value@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -1338,16 +3447,178 @@ use@^3.1.0: version "3.1.1" resolved "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" -which@^1.2.10, which@^1.2.9: +util-deprecate@~1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util.promisify@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.1.0: + version "3.3.2" + resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +validate-npm-package-license@^3.0.1: + version "3.0.3" + resolved "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + +walker@~1.0.5: + version "1.0.7" + resolved "http://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.18.0: + version "0.18.0" + resolved "http://registry.npm.taobao.org/watch/download/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "http://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + +whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" + +whatwg-url@^6.4.0, whatwg-url@^6.4.1: + version "6.5.0" + resolved "http://registry.npm.taobao.org/whatwg-url/download/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +window-size@0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrappy@1: version "1.0.2" resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^5.2.0: + version "5.2.2" + resolved "http://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + +y18n@^3.2.1: + version "3.2.1" + resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + yallist@^2.1.2: version "2.1.2" resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.0" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +yargs@~3.10.0: + version "3.10.0" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From b91a470c316ea25cf45373efea9dd89ff81ca391 Mon Sep 17 00:00:00 2001 From: nodece Date: Sun, 29 Jul 2018 17:54:44 +0800 Subject: [PATCH 059/497] Add examples folder --- examples/abac_model.conf | 11 +++++++++++ examples/basic_inverse_policy.csv | 2 ++ examples/basic_model.conf | 11 +++++++++++ examples/basic_policy.csv | 2 ++ examples/basic_with_root_model.conf | 11 +++++++++++ examples/basic_without_resources_model.conf | 11 +++++++++++ examples/basic_without_resources_policy.csv | 2 ++ examples/basic_without_users_model.conf | 11 +++++++++++ examples/basic_without_users_policy.csv | 2 ++ examples/error/error_model.conf | 11 +++++++++++ examples/error/error_policy.csv | 2 ++ examples/ipmatch_model.conf | 11 +++++++++++ examples/ipmatch_policy.csv | 2 ++ examples/keymatch2_model.conf | 11 +++++++++++ examples/keymatch2_policy.csv | 2 ++ examples/keymatch_custom_model.conf | 11 +++++++++++ examples/keymatch_model.conf | 11 +++++++++++ examples/keymatch_policy.csv | 7 +++++++ examples/priority_indeterminate_policy.csv | 1 + examples/priority_model.conf | 14 ++++++++++++++ examples/priority_policy.csv | 12 ++++++++++++ examples/rbac_model.conf | 14 ++++++++++++++ examples/rbac_policy.csv | 6 ++++++ examples/rbac_with_deny_model.conf | 14 ++++++++++++++ examples/rbac_with_deny_policy.csv | 7 +++++++ examples/rbac_with_domains_model.conf | 14 ++++++++++++++ examples/rbac_with_domains_policy.csv | 7 +++++++ examples/rbac_with_not_deny_model.conf | 14 ++++++++++++++ examples/rbac_with_resource_roles_model.conf | 15 +++++++++++++++ examples/rbac_with_resource_roles_policy.csv | 7 +++++++ 30 files changed, 256 insertions(+) create mode 100644 examples/abac_model.conf create mode 100644 examples/basic_inverse_policy.csv create mode 100644 examples/basic_model.conf create mode 100644 examples/basic_policy.csv create mode 100644 examples/basic_with_root_model.conf create mode 100644 examples/basic_without_resources_model.conf create mode 100644 examples/basic_without_resources_policy.csv create mode 100644 examples/basic_without_users_model.conf create mode 100644 examples/basic_without_users_policy.csv create mode 100644 examples/error/error_model.conf create mode 100644 examples/error/error_policy.csv create mode 100644 examples/ipmatch_model.conf create mode 100644 examples/ipmatch_policy.csv create mode 100644 examples/keymatch2_model.conf create mode 100644 examples/keymatch2_policy.csv create mode 100644 examples/keymatch_custom_model.conf create mode 100644 examples/keymatch_model.conf create mode 100644 examples/keymatch_policy.csv create mode 100644 examples/priority_indeterminate_policy.csv create mode 100644 examples/priority_model.conf create mode 100644 examples/priority_policy.csv create mode 100644 examples/rbac_model.conf create mode 100644 examples/rbac_policy.csv create mode 100644 examples/rbac_with_deny_model.conf create mode 100644 examples/rbac_with_deny_policy.csv create mode 100644 examples/rbac_with_domains_model.conf create mode 100644 examples/rbac_with_domains_policy.csv create mode 100644 examples/rbac_with_not_deny_model.conf create mode 100644 examples/rbac_with_resource_roles_model.conf create mode 100644 examples/rbac_with_resource_roles_policy.csv diff --git a/examples/abac_model.conf b/examples/abac_model.conf new file mode 100644 index 00000000..4cfaea38 --- /dev/null +++ b/examples/abac_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == r.obj.Owner \ No newline at end of file diff --git a/examples/basic_inverse_policy.csv b/examples/basic_inverse_policy.csv new file mode 100644 index 00000000..276c4403 --- /dev/null +++ b/examples/basic_inverse_policy.csv @@ -0,0 +1,2 @@ +p, alice, data1, write +p, bob, data2, read \ No newline at end of file diff --git a/examples/basic_model.conf b/examples/basic_model.conf new file mode 100644 index 00000000..dc6da813 --- /dev/null +++ b/examples/basic_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/basic_policy.csv b/examples/basic_policy.csv new file mode 100644 index 00000000..57aaa976 --- /dev/null +++ b/examples/basic_policy.csv @@ -0,0 +1,2 @@ +p, alice, data1, read +p, bob, data2, write \ No newline at end of file diff --git a/examples/basic_with_root_model.conf b/examples/basic_with_root_model.conf new file mode 100644 index 00000000..8f13907e --- /dev/null +++ b/examples/basic_with_root_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && r.obj == p.obj && r.act == p.act || r.sub == "root" \ No newline at end of file diff --git a/examples/basic_without_resources_model.conf b/examples/basic_without_resources_model.conf new file mode 100644 index 00000000..f61bd710 --- /dev/null +++ b/examples/basic_without_resources_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, act + +[policy_definition] +p = sub, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && r.act == p.act \ No newline at end of file diff --git a/examples/basic_without_resources_policy.csv b/examples/basic_without_resources_policy.csv new file mode 100644 index 00000000..c861941b --- /dev/null +++ b/examples/basic_without_resources_policy.csv @@ -0,0 +1,2 @@ +p, alice, read +p, bob, write \ No newline at end of file diff --git a/examples/basic_without_users_model.conf b/examples/basic_without_users_model.conf new file mode 100644 index 00000000..1fe5993c --- /dev/null +++ b/examples/basic_without_users_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = obj, act + +[policy_definition] +p = obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/basic_without_users_policy.csv b/examples/basic_without_users_policy.csv new file mode 100644 index 00000000..79048da6 --- /dev/null +++ b/examples/basic_without_users_policy.csv @@ -0,0 +1,2 @@ +p, data1, read +p, data2, write \ No newline at end of file diff --git a/examples/error/error_model.conf b/examples/error/error_model.conf new file mode 100644 index 00000000..59304dbe --- /dev/null +++ b/examples/error/error_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/error/error_policy.csv b/examples/error/error_policy.csv new file mode 100644 index 00000000..e490c7d2 --- /dev/null +++ b/examples/error/error_policy.csv @@ -0,0 +1,2 @@ +p, alice, data1, read +bob, data2, write \ No newline at end of file diff --git a/examples/ipmatch_model.conf b/examples/ipmatch_model.conf new file mode 100644 index 00000000..26e4b011 --- /dev/null +++ b/examples/ipmatch_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = ipMatch(r.sub, p.sub) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/ipmatch_policy.csv b/examples/ipmatch_policy.csv new file mode 100644 index 00000000..ca678a92 --- /dev/null +++ b/examples/ipmatch_policy.csv @@ -0,0 +1,2 @@ +p, 192.168.2.0/24, data1, read +p, 10.0.0.0/16, data2, write \ No newline at end of file diff --git a/examples/keymatch2_model.conf b/examples/keymatch2_model.conf new file mode 100644 index 00000000..944123de --- /dev/null +++ b/examples/keymatch2_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act) \ No newline at end of file diff --git a/examples/keymatch2_policy.csv b/examples/keymatch2_policy.csv new file mode 100644 index 00000000..941a48f8 --- /dev/null +++ b/examples/keymatch2_policy.csv @@ -0,0 +1,2 @@ +p, alice, /alice_data/:resource, GET +p, alice, /alice_data2/:id/using/:resId, GET \ No newline at end of file diff --git a/examples/keymatch_custom_model.conf b/examples/keymatch_custom_model.conf new file mode 100644 index 00000000..1cad8bfd --- /dev/null +++ b/examples/keymatch_custom_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && keyMatchCustom(r.obj, p.obj) && regexMatch(r.act, p.act) \ No newline at end of file diff --git a/examples/keymatch_model.conf b/examples/keymatch_model.conf new file mode 100644 index 00000000..4f86ba8f --- /dev/null +++ b/examples/keymatch_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act) \ No newline at end of file diff --git a/examples/keymatch_policy.csv b/examples/keymatch_policy.csv new file mode 100644 index 00000000..d6e9b7d4 --- /dev/null +++ b/examples/keymatch_policy.csv @@ -0,0 +1,7 @@ +p, alice, /alice_data/*, GET +p, alice, /alice_data/resource1, POST + +p, bob, /alice_data/resource2, GET +p, bob, /bob_data/*, POST + +p, cathy, /cathy_data, (GET)|(POST) \ No newline at end of file diff --git a/examples/priority_indeterminate_policy.csv b/examples/priority_indeterminate_policy.csv new file mode 100644 index 00000000..c4e67cd9 --- /dev/null +++ b/examples/priority_indeterminate_policy.csv @@ -0,0 +1 @@ +p, alice, data1, read, intdeterminate \ No newline at end of file diff --git a/examples/priority_model.conf b/examples/priority_model.conf new file mode 100644 index 00000000..ece1562e --- /dev/null +++ b/examples/priority_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act, eft + +[role_definition] +g = _, _ + +[policy_effect] +e = priority(p.eft) || deny + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/priority_policy.csv b/examples/priority_policy.csv new file mode 100644 index 00000000..1ec5e5a7 --- /dev/null +++ b/examples/priority_policy.csv @@ -0,0 +1,12 @@ +p, alice, data1, read, allow +p, data1_deny_group, data1, read, deny +p, data1_deny_group, data1, write, deny +p, alice, data1, write, allow + +g, alice, data1_deny_group + +p, data2_allow_group, data2, read, allow +p, bob, data2, read, deny +p, bob, data2, write, deny + +g, bob, data2_allow_group \ No newline at end of file diff --git a/examples/rbac_model.conf b/examples/rbac_model.conf new file mode 100644 index 00000000..71159e38 --- /dev/null +++ b/examples/rbac_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_policy.csv b/examples/rbac_policy.csv new file mode 100644 index 00000000..9bbfa7cf --- /dev/null +++ b/examples/rbac_policy.csv @@ -0,0 +1,6 @@ +p, alice, data1, read +p, bob, data2, write +p, data2_admin, data2, read +p, data2_admin, data2, write + +g, alice, data2_admin \ No newline at end of file diff --git a/examples/rbac_with_deny_model.conf b/examples/rbac_with_deny_model.conf new file mode 100644 index 00000000..33749f00 --- /dev/null +++ b/examples/rbac_with_deny_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act, eft + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) && !some(where (p.eft == deny)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_with_deny_policy.csv b/examples/rbac_with_deny_policy.csv new file mode 100644 index 00000000..0603db8d --- /dev/null +++ b/examples/rbac_with_deny_policy.csv @@ -0,0 +1,7 @@ +p, alice, data1, read, allow +p, bob, data2, write, allow +p, data2_admin, data2, read, allow +p, data2_admin, data2, write, allow +p, alice, data2, write, deny + +g, alice, data2_admin \ No newline at end of file diff --git a/examples/rbac_with_domains_model.conf b/examples/rbac_with_domains_model.conf new file mode 100644 index 00000000..57c37216 --- /dev/null +++ b/examples/rbac_with_domains_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, dom, obj, act + +[policy_definition] +p = sub, dom, obj, act + +[role_definition] +g = _, _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_with_domains_policy.csv b/examples/rbac_with_domains_policy.csv new file mode 100644 index 00000000..8810a7cc --- /dev/null +++ b/examples/rbac_with_domains_policy.csv @@ -0,0 +1,7 @@ +p, admin, domain1, data1, read +p, admin, domain1, data1, write +p, admin, domain2, data2, read +p, admin, domain2, data2, write + +g, alice, admin, domain1 +g, bob, admin, domain2 \ No newline at end of file diff --git a/examples/rbac_with_not_deny_model.conf b/examples/rbac_with_not_deny_model.conf new file mode 100644 index 00000000..dcf03a1e --- /dev/null +++ b/examples/rbac_with_not_deny_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act, eft + +[role_definition] +g = _, _ + +[policy_effect] +e = !some(where (p_eft == deny)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_with_resource_roles_model.conf b/examples/rbac_with_resource_roles_model.conf new file mode 100644 index 00000000..845bc6c7 --- /dev/null +++ b/examples/rbac_with_resource_roles_model.conf @@ -0,0 +1,15 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ +g2 = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && g2(r.obj, p.obj) && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_with_resource_roles_policy.csv b/examples/rbac_with_resource_roles_policy.csv new file mode 100644 index 00000000..b1d36daf --- /dev/null +++ b/examples/rbac_with_resource_roles_policy.csv @@ -0,0 +1,7 @@ +p, alice, data1, read +p, bob, data2, write +p, data_group_admin, data_group, write + +g, alice, data_group_admin +g2, data1, data_group +g2, data2, data_group \ No newline at end of file From 3796889a8e427f7edd7e4e3b768f7de6b8d0af0c Mon Sep 17 00:00:00 2001 From: nodece Date: Sun, 29 Jul 2018 17:57:19 +0800 Subject: [PATCH 060/497] :green_heart: Update script order --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4884c415..cd94b775 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,8 @@ ], "lint-staged": { "*.{ts,js}": [ - "tslint --fix", "prettier --write", + "tslint --fix", "git add" ] }, From d0079827dc467e90a4e331b961c6de1733a208e3 Mon Sep 17 00:00:00 2001 From: nodece Date: Sun, 29 Jul 2018 18:00:35 +0800 Subject: [PATCH 061/497] :sparkles: implement the method in enforcer.ts file --- src/enforcer.ts | 66 ++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 4364df66..beb38e9f 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,13 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as util from './util'; -import { Model, FunctionMap } from './model'; -import { Effector, DefaultEffector } from './effect'; -import { Adapter, FileAdapter } from './persist'; -import { DefaultFilteredAdapter } from './persist'; -import { Watcher } from './persist'; -import { RoleManager, DefaultRoleManager } from './rbac'; +import { setEnableLog } from './util'; +import { FunctionMap, Model } from './model'; +import { DefaultEffector, Effector } from './effect'; +import { + Adapter, + DefaultFilteredAdapter, + FileAdapter, + Filter, + FilteredAdapter, + Watcher +} from './persist'; +import { DefaultRoleManager, RoleManager } from './rbac'; // Enforcer is the main interface for authorization enforcement and policy management. export class Enforcer { @@ -27,10 +32,9 @@ export class Enforcer { private fm: Map; public eft: Effector; - private adapter: Adapter; - // private watcher: IWatcher; + private adapter: FilteredAdapter | Adapter; + private watcher: Watcher | null = null; public rm: RoleManager; - public enabled: boolean; private autoSave: boolean; private autoBuildRoleLinks: boolean; @@ -44,8 +48,7 @@ export class Enforcer { this.fm = new Map(); this.eft = new DefaultEffector(); - this.adapter = new FileAdapter(''); - // this.watcher = new Watcher(); + this.adapter = new DefaultFilteredAdapter(''); this.rm = new DefaultRoleManager(0); this.enabled = false; @@ -67,7 +70,7 @@ export class Enforcer { let parsedParamLen = 0; if (params.length >= 1) { const enableLog = params[params.length - 1]; - e.enableLog(enableLog); + setEnableLog(enableLog); parsedParamLen++; } @@ -186,12 +189,8 @@ export class Enforcer { // setWatcher sets the current watcher. public setWatcher(watcher: Watcher): void { - // this.watcher = watcher; - // // error intentionally ignored - // const func = (): void => { - // this.loadPolicy(); - // }; - // watcher.setUpdateCallback(func); + this.watcher = watcher; + watcher.setUpdateCallback(() => this.loadPolicy()); } // setRoleManager sets the current role manager. @@ -224,20 +223,14 @@ export class Enforcer { } // loadFilteredPolicy reloads a filtered policy from file/database. - public loadFilteredPolicy(filter: any): boolean { + public loadFilteredPolicy(filter: Filter): boolean { this.model.clearPolicy(); - let filteredAdapter = new DefaultFilteredAdapter(''); - - // Attempt to cast the Adapter as a FilteredAdapter - if (filteredAdapter instanceof this.adapter) { - filteredAdapter = this.adapter; + if ((this.adapter as FilteredAdapter).isFiltered) { + (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); } else { throw new Error('filtered policies are not supported by this adapter'); } - if (filteredAdapter.loadFilteredPolicy(this.model, filter)) { - return false; - } this.model.printPolicy(); if (this.autoBuildRoleLinks) { @@ -248,11 +241,10 @@ export class Enforcer { // isFiltered returns true if the loaded policy has been filtered. public isFiltered(): boolean { - const filteredAdapter = new DefaultFilteredAdapter(''); - if (!(filteredAdapter instanceof this.adapter)) { - return false; + if ((this.adapter as FilteredAdapter).isFiltered) { + return (this.adapter as FilteredAdapter).isFiltered(); } - return this.adapter.isFiltered(); + return false; } // savePolicy saves the current policy (usually after changed with Casbin API) back to file/databasthis. @@ -263,9 +255,9 @@ export class Enforcer { if (!this.adapter.savePolicy(this.model)) { return false; } - // if (!this.watcher) { - // return this.watcher.update(); - // } + if (this.watcher) { + return this.watcher.update(); + } return true; } @@ -277,7 +269,7 @@ export class Enforcer { // enableLog changes whether to print Casbin log to the standard output. public static enableLog(enable: boolean): void { - util.enableLog = enable; + setEnableLog(enable); } // enableAutoSave controls whether to save a policy rule automatically to @@ -302,6 +294,7 @@ export class Enforcer { // Enforce decides whether a "subject" can access a "object" with the // operation "action", input parameters are usually: (sub, obj, act). public enforce(...rvals: any[]): boolean { + // TODO code return !this.enabled; // if (!this.enabled) { @@ -431,5 +424,6 @@ export class Enforcer { // } // return result + ':'.replace('-', ' '); } } From 55631102571e2cd672efc89d3d2143e3f4425216 Mon Sep 17 00:00:00 2001 From: nodece Date: Sun, 29 Jul 2018 18:01:20 +0800 Subject: [PATCH 062/497] :heavy_plus_sign: Add jest test dependency --- test/testUtil.ts | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 test/testUtil.ts diff --git a/test/testUtil.ts b/test/testUtil.ts new file mode 100644 index 00000000..34eb5142 --- /dev/null +++ b/test/testUtil.ts @@ -0,0 +1,3 @@ +test('add test', () => { + console.log('hello jest'); +}); From 4f91eeac6bbc8cf803a2570d20ebc6eb2db29a80 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 29 Jul 2018 18:33:59 +0800 Subject: [PATCH 063/497] Fix the "npm test" command. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index cd94b775..ffbdedd8 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "prettier": "prettier --write \"src/**/*.ts\" \"scripts/**/*.js\"", "build": "node scripts/build.js", "lint": "tslint \"src/**/*.ts\"", - "fix": "tslint \"src/**/*.ts\" --fix" + "fix": "tslint \"src/**/*.ts\" --fix", + "test": "jest" }, "devDependencies": { "@types/ip": "^0.0.31", From 270acb588940b67a559849d8d6aebf7f3088c02f Mon Sep 17 00:00:00 2001 From: nodece Date: Mon, 30 Jul 2018 00:18:36 +0800 Subject: [PATCH 064/497] Change jest config & Add expr-eval dependency --- package.json | 10 ++- yarn.lock | 229 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 224 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index ffbdedd8..5bd61ca9 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "typescript": "^2.9.2" }, "dependencies": { + "expr-eval": "^1.2.2", "fs-extra": "^7.0.0", "ip": "^1.1.5", "lodash": "^4.17.10" @@ -51,11 +52,12 @@ }, "jest": { "testURL": "http://localhost", - "testPathIgnorePatterns": [ - "/node_modules/", - "/\\./" + "transform": { + "^.+\\.(ts|tsx)$": "ts-jest" + }, + "testMatch": [ + "**/test/*.+(ts|tsx)" ], - "testRegex": "(test/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", "moduleFileExtensions": [ "ts", "tsx", diff --git a/yarn.lock b/yarn.lock index 408bc50f..ee8b6e21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -121,6 +121,13 @@ any-observable@^0.3.0: version "0.3.0" resolved "http://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" +anymatch@^1.3.0: + version "1.3.2" + resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + anymatch@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -177,6 +184,18 @@ array-equal@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +array-filter@~0.0.0: + version "0.0.1" + resolved "http://registry.npm.taobao.org/array-filter/download/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-map@~0.0.0: + version "0.0.0" + resolved "http://registry.npm.taobao.org/array-map/download/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + array-unique@^0.2.1: version "0.2.1" resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -205,6 +224,10 @@ astral-regex@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +async-each@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + async-limiter@~1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" @@ -317,7 +340,7 @@ babel-plugin-syntax-object-rest-spread@^6.13.0: version "6.13.0" resolved "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" -babel-preset-jest@^23.2.0: +babel-preset-jest@^23.0.0, babel-preset-jest@^23.2.0: version "23.2.0" resolved "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" dependencies: @@ -336,7 +359,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: version "6.26.0" resolved "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -402,6 +425,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +binary-extensions@^1.0.0: + version "1.11.0" + resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + brace-expansion@^1.1.7: version "1.1.11" resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -521,6 +548,21 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chokidar@^1.6.0: + version "1.7.0" + resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + chownr@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/chownr/download/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" @@ -646,6 +688,22 @@ cosmiconfig@^5.0.2: js-yaml "^3.9.0" parse-json "^4.0.0" +cpx@^1.5.0: + version "1.5.0" + resolved "http://registry.npm.taobao.org/cpx/download/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" + dependencies: + babel-runtime "^6.9.2" + chokidar "^1.6.0" + duplexer "^0.1.1" + glob "^7.0.5" + glob2base "^0.0.12" + minimatch "^3.0.2" + mkdirp "^0.5.1" + resolve "^1.1.7" + safe-buffer "^5.0.1" + shell-quote "^1.6.1" + subarg "^1.0.0" + cross-spawn@^5.0.1: version "5.1.0" resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -698,6 +756,12 @@ decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decamelize@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + dependencies: + xregexp "4.0.0" + decode-uri-component@^0.2.0: version "0.2.0" resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -778,6 +842,10 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" +duplexer@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -916,6 +984,10 @@ expect@^23.4.0: jest-message-util "^23.4.0" jest-regex-util "^23.3.0" +expr-eval@^1.2.2: + version "1.2.2" + resolved "http://registry.npm.taobao.org/expr-eval/download/expr-eval-1.2.2.tgz#8b1a160b814e67da7652007e2693714895221ea0" + extend-shallow@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1015,6 +1087,10 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +find-index@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/find-index/download/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + find-parent-dir@^0.3.0: version "0.3.0" resolved "http://registry.npm.taobao.org/find-parent-dir/download/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" @@ -1032,6 +1108,12 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1064,6 +1146,14 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-extra@6.0.1: + version "6.0.1" + resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^7.0.0: version "7.0.0" resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" @@ -1082,7 +1172,7 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.2.3: +fsevents@^1.0.0, fsevents@^1.2.3: version "1.2.4" resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" dependencies: @@ -1141,6 +1231,12 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob2base@^0.0.12: + version "0.0.12" + resolved "http://registry.npm.taobao.org/glob2base/download/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -1313,7 +1409,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@~2.0.3: version "2.0.3" resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -1351,6 +1447,12 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-binary-path@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -1678,7 +1780,7 @@ jest-cli@^23.4.2: which "^1.2.12" yargs "^11.0.0" -jest-config@^23.4.2: +jest-config@^23.0.0, jest-config@^23.4.2: version "23.4.2" resolved "http://registry.npm.taobao.org/jest-config/download/jest-config-23.4.2.tgz#62a105e14b8266458f2bf4d32403b2c44418fa77" dependencies: @@ -1999,6 +2101,10 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + jsprim@^1.2.2: version "1.4.1" resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -2149,6 +2255,13 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash.sortby@^4.7.0: version "4.7.0" resolved "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -2229,7 +2342,7 @@ merge@^1.2.0: version "1.2.0" resolved "http://registry.npm.taobao.org/merge/download/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" -micromatch@^2.3.11: +micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -2279,7 +2392,7 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" -minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -2289,7 +2402,7 @@ minimist@0.0.8: version "0.0.8" resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.1, minimist@^1.2.0: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -2407,7 +2520,7 @@ normalize-path@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -2577,12 +2690,24 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -2591,6 +2716,10 @@ p-try@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + parse-glob@^3.0.4: version "3.0.4" resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -2683,6 +2812,12 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + dependencies: + find-up "^3.0.0" + please-upgrade-node@^3.0.2: version "3.1.1" resolved "http://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" @@ -2783,7 +2918,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.6: +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.6" resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -2795,6 +2930,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + realpath-native@^1.0.0: version "1.0.1" resolved "http://registry.npm.taobao.org/realpath-native/download/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633" @@ -2901,7 +3045,7 @@ resolve@1.1.7: version "1.1.7" resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: version "1.8.1" resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: @@ -3000,6 +3144,10 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + set-value@^0.4.3: version "0.4.3" resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" @@ -3028,6 +3176,15 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shell-quote@^1.6.1: + version "1.6.1" + resolved "http://registry.npm.taobao.org/shell-quote/download/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + shellwords@^0.1.1: version "0.1.1" resolved "http://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -3256,6 +3413,12 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +subarg@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/subarg/download/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + supports-color@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -3359,6 +3522,19 @@ trim-right@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +ts-jest@^23.0.1: + version "23.0.1" + resolved "http://registry.npm.taobao.org/ts-jest/download/ts-jest-23.0.1.tgz#c90e747b2787d3394319cde77c2748a87aaf2f48" + dependencies: + babel-plugin-istanbul "^4.1.6" + babel-preset-jest "^23.0.0" + cpx "^1.5.0" + fs-extra "6.0.1" + jest-config "^23.0.0" + lodash "^4.17.10" + pkg-dir "^3.0.0" + yargs "^12.0.1" + tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -3579,10 +3755,18 @@ xml-name-validator@^3.0.0: version "3.0.0" resolved "http://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" +xregexp@4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/xregexp/download/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + y18n@^3.2.1: version "3.2.1" resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +"y18n@^3.2.1 || ^4.0.0": + version "4.0.0" + resolved "http://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + yallist@^2.1.2: version "2.1.2" resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -3591,6 +3775,12 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" +yargs-parser@^10.1.0: + version "10.1.0" + resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + yargs-parser@^9.0.2: version "9.0.2" resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" @@ -3614,6 +3804,23 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" +yargs@^12.0.1: + version "12.0.1" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2" + dependencies: + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" + yargs@~3.10.0: version "3.10.0" resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From 1f517cd141f7587f631e20424964d42a6bfdd46b Mon Sep 17 00:00:00 2001 From: nodece Date: Mon, 30 Jul 2018 00:21:45 +0800 Subject: [PATCH 065/497] Fix type error --- src/model/assertion.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/assertion.ts b/src/model/assertion.ts index d7ebd33a..0da0103a 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -22,7 +22,7 @@ export class Assertion { public key: string; public value: string; public tokens: string[]; - public policy: string[][]; + public policy: [string[]]; public rm: rbac.RoleManager; /** From 137ae4ee5c0da4a5d99567895f1f9365241a7262 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Mon, 30 Jul 2018 16:01:42 +0800 Subject: [PATCH 066/497] :heavy_plus_sign: add expr-eval lib --- package.json | 1 + yarn.lock | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/package.json b/package.json index ffbdedd8..f3022bf3 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "typescript": "^2.9.2" }, "dependencies": { + "expr-eval": "^1.2.2", "fs-extra": "^7.0.0", "ip": "^1.1.5", "lodash": "^4.17.10" diff --git a/yarn.lock b/yarn.lock index 408bc50f..1ab1f24e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -916,6 +916,10 @@ expect@^23.4.0: jest-message-util "^23.4.0" jest-regex-util "^23.3.0" +expr-eval@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expr-eval/-/expr-eval-1.2.2.tgz#8b1a160b814e67da7652007e2693714895221ea0" + extend-shallow@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" From e9dcab88ddf877079b0fd6575a43a7537fd9b97e Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Mon, 30 Jul 2018 16:03:09 +0800 Subject: [PATCH 067/497] :art: format function style and add getEnableLog funtion --- src/util/log.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/util/log.ts b/src/util/log.ts index 5a12f4cb..09d23c66 100644 --- a/src/util/log.ts +++ b/src/util/log.ts @@ -16,24 +16,25 @@ let enableLog = false; // logPrint prints the log. -const logPrint: (...v: any[]) => void = (...v: any[]): void => { +function logPrint(...v: any[]): void { if (enableLog) { console.log(...v); } -}; +} // logPrintf prints the log with the format. -const logPrintf: (format: string, ...v: any[]) => void = ( - format: string, - ...v: any[] -): void => { +function logPrintf(format: string, ...v: any[]): void { if (enableLog) { console.log(...v); } -}; +} + +function getEnableLog(): boolean { + return enableLog; +} function setEnableLog(val: boolean) { enableLog = val; } -export { logPrint, logPrintf, setEnableLog }; +export { logPrint, logPrintf, getEnableLog, setEnableLog }; From c668f83e1d6846f1f7cea8dc7b441aca08de4aa9 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Mon, 30 Jul 2018 16:14:32 +0800 Subject: [PATCH 068/497] :rocket: complete main function except evalautor --- src/enforcer.ts | 283 +++++++++++++++++++++++++----------------------- 1 file changed, 150 insertions(+), 133 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index df36fa8b..1cdbb593 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,9 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { setEnableLog } from './util'; -import { FunctionMap, Model } from './model'; -import { DefaultEffector, Effector } from './effect'; +import * as _ from 'lodash'; +import { Parser } from 'expr-eval'; +import { + setEnableLog, + getEnableLog, + generateGFunction, + logPrint +} from './util'; +import { Assertion, FunctionMap, Model } from './model'; +import { Effect, DefaultEffector, Effector } from './effect'; import { Adapter, DefaultFilteredAdapter, @@ -294,135 +301,145 @@ export class Enforcer { // Enforce decides whether a "subject" can access a "object" with the // operation "action", input parameters are usually: (sub, obj, act). public enforce(...rvals: any[]): boolean { - // TODO code - return !this.enabled; - - // if (!this.enabled) { - // return true; - // } - - // functions := make(map[string]govaluatthis.ExpressionFunction) - // for key, function := range this.fm { - // functions[key] = function - // } - // if _, ok := this.model['g']; ok { - // for key, ast := range this.model['g'] { - // rm := ast.RM - // functions[key] = util.GenerateGFunction(rm) - // } - // } - - // expString := this.model['m']['m'].Value - // expression, _ := govaluatthis.NewEvaluableExpressionWithFunctions(expString, functions) - - // var policyEffects []effect.Effect - // var matcherResults []float64 - // if policyLen := len(this.model['p']['p'].Policy); policyLen != 0 { - // policyEffects = make([]effect.Effect, policyLen) - // matcherResults = make([]float64, policyLen) - - // for i, pvals := range this.model['p']['p'].Policy { - // // util.LogPrint('Policy Rule: ', pvals) - - // parameters := make(map[string]interface{}, 8) - // for j, token := range this.model['r']['r'].Tokens { - // parameters[token] = rvals[j] - // } - // for j, token := range this.model['p']['p'].Tokens { - // parameters[token] = pvals[j] - // } - - // result, err := expression.Evaluate(parameters) - // // util.LogPrint('Result: ', result) - - // if err != nil { - // policyEffects[i] = effect.Indeterminate - // panic(err) - // } - - // switch result.(type) { - // case bool: - // if !result.(bool) { - // policyEffects[i] = effect.Indeterminate - // continue - // } - // case float64: - // if result.(float64) == 0 { - // policyEffects[i] = effect.Indeterminate - // continue - // } else { - // matcherResults[i] = result.(float64) - // } - // default: - // panic(errors.New('matcher result should be bool, int or float')) - // } - - // if eft, ok := parameters['p_eft']; ok { - // if eft == 'allow' { - // policyEffects[i] = effect.Allow - // } else if eft == 'deny' { - // policyEffects[i] = effect.Deny - // } else { - // policyEffects[i] = effect.Indeterminate - // } - // } else { - // policyEffects[i] = effect.Allow - // } - - // if this.model['e']['e'].Value == 'priority(p_eft) || deny' { - // break - // } - - // } - // } else { - // policyEffects = make([]effect.Effect, 1) - // matcherResults = make([]float64, 1) - - // parameters := make(map[string]interface{}, 8) - // for j, token := range this.model['r']['r'].Tokens { - // parameters[token] = rvals[j] - // } - // for _, token := range this.model['p']['p'].Tokens { - // parameters[token] = '' - // } - - // result, err := expression.Evaluate(parameters) - // // util.LogPrint("Result: ", result) - - // if err != nil { - // policyEffects[0] = effect.Indeterminate - // panic(err) - // } - - // if result.(bool) { - // policyEffects[0] = effect.Allow - // } else { - // policyEffects[0] = effect.Indeterminate - // } - // } - - // // util.LogPrint("Rule Results: ", policyEffects) - - // result, err := this.eft.MergeEffects(this.model['e']['e'].Value, policyEffects, matcherResults) - // if err != nil { - // panic(err) - // } - - // // only generate the request --> result string if the message - // // is going to be logged. - // if util.EnableLog { - // reqStr := 'Request: ' - // for i, rval := range rvals { - // if i != len(rvals)-1 { - // reqStr += fmt.Sprintf('%v, ', rval) - // } else { - // reqStr += fmt.Sprintf('%v', rval) - // } - // } - // reqStr += fmt.Sprintf(' ---> %t', result) - // util.LogPrint(reqStr) - // } - - // return result + if (!this.enabled) { + return true; + } + + const functions = new Map(); + for (const key in this.fm) { + if (this.fm.hasOwnProperty(key)) { + const parser = new Parser(); + const func = _.get(this.fm, key); + const expr = parser.parse(func); + _.set(functions, key, expr); + } + } + + let astMap = _.get(this.model, 'g'); + let ast: Assertion; + if (astMap) { + for (const key in astMap) { + if (astMap.hasOwnProperty(key)) { + ast = _.get(astMap, key); + const rm = ast.rm; + _.set(functions, key, generateGFunction(rm)); + } + } + } + + astMap = _.get(this.model, 'm'); + ast = _.get(astMap, 'm'); + + const expression = _.get(functions, ast.value); + let result: boolean; + + let policyEffects: number[]; + let matcherResults: number[]; + ast = _.get(_.get(this.model, 'p'), 'p'); + const policy = ast.policy; + if (policy.length !== 0) { + policyEffects = new Array(policy.length); + matcherResults = new Array(policy.length); + + for (let i = 0; i < policy.length; i++) { + const pvals = policy[i]; + logPrint('Policy Rule: ', pvals); + + const parameters = new Map(); + let tokens = _.get(_.get(this.model, 'r'), 'r').tokens; + for (let j = 0; j < tokens.length; j++) { + _.set(parameters, tokens[j], rvals[j]); + } + tokens = _.get(_.get(this.model, 'p'), 'p').tokens; + for (let j = 0; j < tokens.length; j++) { + _.set(parameters, tokens[j], pvals[j]); + } + + result = expression.evaluate(parameters); + logPrint(`Result: ${result}`); + + if (typeof result === 'boolean') { + if (!result) { + policyEffects[i] = Effect.Indeterminate; + } + } else if (typeof result === 'number') { + if (result === 0) { + policyEffects[i] = Effect.Indeterminate; + } else { + matcherResults[i] = result; + } + } else { + throw new Error('matcher result should be bool, int or float'); + } + + if (_.has(parameters, 'p_eft')) { + const eft = _.get(parameters, 'p_eft'); + if (eft === 'allow') { + policyEffects[i] = Effect.Allow; + } else if (eft === 'deny') { + policyEffects[i] = Effect.Deny; + } else { + policyEffects[i] = Effect.Indeterminate; + } + } else { + policyEffects[i] = Effect.Allow; + } + + if ( + _.indexOf( + ['priority(p_eft)', 'deny'], + _.get(_.get(this.model, 'e'), 'e').value + ) > -1 + ) { + break; + } + } + } else { + policyEffects = new Array(1); + matcherResults = new Array(1); + + const parameters = new Map(); + let tokens = _.get(_.get(this.model, 'r'), 'r').tokens; + for (let j = 0; j < tokens.length; j++) { + _.set(parameters, tokens[j], rvals[j]); + } + tokens = _.get(_.get(this.model, 'p'), 'p').tokens; + for (const token of tokens) { + _.set(parameters, tokens, ''); + } + + result = expression.evaluate(parameters); + logPrint(`Result: ${result}`); + + if (result) { + policyEffects[0] = Effect.Allow; + } else { + policyEffects[0] = Effect.Indeterminate; + } + } + + logPrint(`Rule Results: ${policyEffects}`); + + result = this.eft.mergeEffects( + _.get(_.get(this.model, 'e'), 'e').value, + policyEffects, + matcherResults + ); + // only generate the request --> result string if the message + // is going to be logged. + if (getEnableLog()) { + let reqStr = 'Request: '; + for (let i = 0; i < rvals.length; i++) { + if (i + 1 !== rvals.length) { + reqStr += `${rvals[i]}, `; + } else { + reqStr += rvals[i]; + } + } + reqStr += ` ---> ${result}`; + logPrint(reqStr); + } + + return result; } } From 2f3572f121d8d24451df7182f76b2180a0f4daf8 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Mon, 30 Jul 2018 16:41:41 +0800 Subject: [PATCH 069/497] :bug: fix 2d-array's declare bug --- src/model/model.ts | 4 ++-- src/util/util.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 65ea7131..9f723e08 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -161,7 +161,7 @@ export class Model { } // getPolicy gets all rules in a policy. - public getPolicy(sec: string, key: string): string[][] { + public getPolicy(sec: string, key: string): [string[]] { const astMap = _.get(this.model, sec); const ast = _.get(astMap, key); return ast.policy; @@ -210,7 +210,7 @@ export class Model { key: string, fieldIndex: number, ...fieldValues: string[] - ): string[][] { + ): [string[]] { const res = []; const astMap = _.get(this.model, sec); diff --git a/src/util/util.ts b/src/util/util.ts index 817dd100..ea250715 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -38,9 +38,9 @@ const arrayEquals: (a: string[], b: string[]) => boolean = ( }; // array2DEquals determines whether two 2-dimensional string arrays are identical. -const array2DEquals: (a: string[][], b: string[][]) => boolean = ( - a: string[][], - b: string[][] +const array2DEquals: (a: [string[]], b: [string[]]) => boolean = ( + a: [string[]], + b: [string[]] ) => { return _.isEqual(a, b); }; From 793bbdbefed075fb335c675357471f4af3cbf016 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Tue, 31 Jul 2018 10:00:44 +0800 Subject: [PATCH 070/497] :pencil2: fix operator typo --- src/enforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 1cdbb593..044f4115 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -337,7 +337,7 @@ export class Enforcer { let matcherResults: number[]; ast = _.get(_.get(this.model, 'p'), 'p'); const policy = ast.policy; - if (policy.length !== 0) { + if (policy.length > 0) { policyEffects = new Array(policy.length); matcherResults = new Array(policy.length); From 3311874536c0fc6da66da103b7652761ac06f87e Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 31 Jul 2018 13:02:36 +0800 Subject: [PATCH 071/497] Update enforcer.ts --- src/enforcer.ts | 78 +++++++++++++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index df36fa8b..1ecb0a02 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { setEnableLog } from './util'; +import { generateGFunction, setEnableLog } from './util'; import { FunctionMap, Model } from './model'; -import { DefaultEffector, Effector } from './effect'; +import { DefaultEffector, Effect, Effector } from './effect'; import { Adapter, DefaultFilteredAdapter, @@ -24,6 +24,7 @@ import { Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; +import { Parser } from 'expr-eval'; // Enforcer is the main interface for authorization enforcement and policy management. export class Enforcer { @@ -294,33 +295,44 @@ export class Enforcer { // Enforce decides whether a "subject" can access a "object" with the // operation "action", input parameters are usually: (sub, obj, act). public enforce(...rvals: any[]): boolean { - // TODO code - return !this.enabled; - - // if (!this.enabled) { - // return true; - // } - - // functions := make(map[string]govaluatthis.ExpressionFunction) - // for key, function := range this.fm { - // functions[key] = function - // } - // if _, ok := this.model['g']; ok { - // for key, ast := range this.model['g'] { - // rm := ast.RM - // functions[key] = util.GenerateGFunction(rm) - // } - // } - - // expString := this.model['m']['m'].Value - // expression, _ := govaluatthis.NewEvaluableExpressionWithFunctions(expString, functions) - - // var policyEffects []effect.Effect - // var matcherResults []float64 - // if policyLen := len(this.model['p']['p'].Policy); policyLen != 0 { - // policyEffects = make([]effect.Effect, policyLen) - // matcherResults = make([]float64, policyLen) + if (!this.enabled) { + return true; + } + const functions = new Map(); + this.fm.forEach((value, key) => { + functions.set(key, value); + }); + const gList = this.model.model.get('g'); + if (gList) { + gList.forEach((value, key) => { + const rm = value.rm; + // TODO code review + functions.set(key, generateGFunction(rm)); + }); + } + const mValue = this.model.model.get('m'); + const nextMValue = mValue && mValue.get('m'); + const expString = nextMValue && nextMValue.value; + if (!expString) { return false; } + const funcs: { [key: string]: any } = {}; + functions.forEach((value, key) => { + funcs[key] = value; + }); + const expression = Parser.evaluate(expString, funcs); + + const policyEffects: Effect[] = []; + const matcherResults: number[] = []; + const pValue = this.model.model.get('p'); + const { policy }: any = pValue && pValue.get('p'); + if (policy && policy.length !== 0) { + policy.forEach((n: string) => { + const pvals = n; + const parameters = new Map(); + }); + } + // TODO please code + return false; // for i, pvals := range this.model['p']['p'].Policy { // // util.LogPrint('Policy Rule: ', pvals) @@ -426,3 +438,13 @@ export class Enforcer { // return result } } + +function getValueFromMap(map: Map, ...param: any[]): any { + let result = null; + param.forEach(n => { + if (!map) { return; } + result = map.get(n); + map = result; + }); + return result; +} From d138094b9b60437eb3220df61085b46e6f702c1b Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 31 Jul 2018 22:11:14 +0800 Subject: [PATCH 072/497] Add a small test case for Model. --- test/model.test.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 test/model.test.ts diff --git a/test/model.test.ts b/test/model.test.ts new file mode 100644 index 00000000..3d85c580 --- /dev/null +++ b/test/model.test.ts @@ -0,0 +1,36 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Enforcer } from '../src/enforcer'; + +class TestUtil { + public static testEnforce( + e: Enforcer, + sub: string, + obj: string, + act: string, + res: boolean + ): void { + expect(e.enforce(sub, obj, act)).toBe(res); + } +} + +test('testBasicModel', () => { + const e = new Enforcer( + 'examples/basic_model.conf', + 'examples/basic_policy.csv' + ); + + TestUtil.testEnforce(e, 'alice', 'data1', 'read', true); +}); From bf92a6e764147d7d1b81988776276c0995fee00b Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Tue, 31 Jul 2018 22:29:11 +0800 Subject: [PATCH 073/497] :heavy_plus_sign: add ts-jest node_module on dev-dependency --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 5bd61ca9..3d1f2d0c 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "prettier": "^1.13.7", "rollup": "^0.62.0", "rollup-plugin-node-resolve": "^3.3.0", + "ts-jest": "^23.0.1", "tslint": "^5.11.0", "typescript": "^2.9.2" }, From 96b99138fd049c9b584a56e23a066566228c9755 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 31 Jul 2018 22:31:44 +0800 Subject: [PATCH 074/497] Add ts-jest to dependency. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 5bd61ca9..3d1f2d0c 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "prettier": "^1.13.7", "rollup": "^0.62.0", "rollup-plugin-node-resolve": "^3.3.0", + "ts-jest": "^23.0.1", "tslint": "^5.11.0", "typescript": "^2.9.2" }, From bc44a8db8ca683f8e6ef3274c9a44fc4bdf6a808 Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 31 Jul 2018 22:53:03 +0800 Subject: [PATCH 075/497] Fix type error --- src/model/assertion.ts | 4 ++-- src/model/model.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/model/assertion.ts b/src/model/assertion.ts index 0da0103a..b334c97c 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -22,7 +22,7 @@ export class Assertion { public key: string; public value: string; public tokens: string[]; - public policy: [string[]]; + public policy: string[][]; public rm: rbac.RoleManager; /** @@ -32,7 +32,7 @@ export class Assertion { this.key = ''; this.value = ''; this.tokens = []; - this.policy = [[]]; + this.policy = []; this.rm = new rbac.DefaultRoleManager(0); } diff --git a/src/model/model.ts b/src/model/model.ts index 9f723e08..2c9c8b36 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -210,7 +210,7 @@ export class Model { key: string, fieldIndex: number, ...fieldValues: string[] - ): [string[]] { + ): string[][] { const res = []; const astMap = _.get(this.model, sec); From c678690c27afe47c9c1758034b680180ddef6e5e Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 31 Jul 2018 22:54:44 +0800 Subject: [PATCH 076/497] Mission accomplished --- src/enforcer.ts | 142 +++++++++++++++++++++++++----------------------- 1 file changed, 75 insertions(+), 67 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index f0576fb2..143b216b 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -18,7 +18,7 @@ import { logPrint, setEnableLog } from './util'; -import { Assertion, FunctionMap, Model } from './model'; +import { FunctionMap, Model } from './model'; import { DefaultEffector, Effect, Effector } from './effect'; import * as _ from 'lodash'; @@ -307,37 +307,40 @@ export class Enforcer { } const functions = new Map(); - for (const key in this.fm) { - if (this.fm.hasOwnProperty(key)) { - const parser = new Parser(); - const func = _.get(this.fm, key); - const expr = parser.parse(func); - _.set(functions, key, expr); - } - } + this.fm.forEach((value, key) => { + functions.set(key, value); + }); - let astMap = _.get(this.model, 'g'); - let ast: Assertion; + const astMap = this.model.model.get('g'); if (astMap) { - for (const key in astMap) { - if (astMap.hasOwnProperty(key)) { - ast = _.get(astMap, key); - const rm = ast.rm; - _.set(functions, key, generateGFunction(rm)); - } - } + astMap.forEach((value, key) => { + const rm = value.rm; + functions.set(key, generateGFunction(rm)); + }); } - astMap = _.get(this.model, 'm'); - ast = _.get(astMap, 'm'); + const astItem = [...(this.model.model.get('m') || [])].find( + ([key]) => key === 'm' + ); + if (!astItem) { + throw new Error('Ast is undefined'); + } + const [, ast] = astItem; + + const functionsForJs: { [key: string]: any } = {}; + functions.forEach((value, key) => { + functionsForJs[key] = value; + }); - const expression = _.get(functions, ast.value); - let result: boolean; + const expression = Parser.parse(ast.value); + + let result: boolean = false; let policyEffects: number[]; let matcherResults: number[]; - ast = _.get(_.get(this.model, 'p'), 'p'); - const policy = ast.policy; + const pRootValue = this.model.model.get('p'); + const { policy }: any = pRootValue && pRootValue.get('p'); + if (policy.length > 0) { policyEffects = new Array(policy.length); matcherResults = new Array(policy.length); @@ -346,17 +349,26 @@ export class Enforcer { const pvals = policy[i]; logPrint('Policy Rule: ', pvals); - const parameters = new Map(); - let tokens = _.get(_.get(this.model, 'r'), 'r').tokens; - for (let j = 0; j < tokens.length; j++) { - _.set(parameters, tokens[j], rvals[j]); + const rRootValue = this.model.model.get('r'); + const rValue = rRootValue && rRootValue.get('r'); + let tokens = rValue && rValue.tokens; + if (!tokens) { + throw new Error('tokens is undefined'); } - tokens = _.get(_.get(this.model, 'p'), 'p').tokens; - for (let j = 0; j < tokens.length; j++) { - _.set(parameters, tokens[j], pvals[j]); + tokens.forEach((n, index) => { + functionsForJs[n] = rvals[index]; + }); + + const pValue = pRootValue && pRootValue.get('p'); + tokens = pValue && pValue.tokens; + if (!tokens) { + throw new Error('tokens is undefined'); } + tokens.forEach((n, index) => { + functionsForJs[n] = rvals[index]; + }); - result = expression.evaluate(parameters); + result = expression.evaluate(functionsForJs); logPrint(`Result: ${result}`); if (typeof result === 'boolean') { @@ -373,8 +385,8 @@ export class Enforcer { throw new Error('matcher result should be bool, int or float'); } - if (_.has(parameters, 'p_eft')) { - const eft = _.get(parameters, 'p_eft'); + if (_.has(functionsForJs, 'p_eft')) { + const eft = _.get(functionsForJs, 'p_eft'); if (eft === 'allow') { policyEffects[i] = Effect.Allow; } else if (eft === 'deny') { @@ -385,31 +397,38 @@ export class Enforcer { } else { policyEffects[i] = Effect.Allow; } - - if ( - _.indexOf( - ['priority(p_eft)', 'deny'], - _.get(_.get(this.model, 'e'), 'e').value - ) > -1 - ) { - break; + const eRootMap = this.model.model.get('e'); + const eValue = eRootMap && eRootMap.get('e'); + if (eValue) { + if (_.indexOf(['priority(p_eft)', 'deny'], eValue.value) > -1) { + break; + } } } } else { policyEffects = new Array(1); matcherResults = new Array(1); - const parameters = new Map(); - let tokens = _.get(_.get(this.model, 'r'), 'r').tokens; - for (let j = 0; j < tokens.length; j++) { - _.set(parameters, tokens[j], rvals[j]); + const rRootValue = this.model.model.get('r'); + const rValue = rRootValue && rRootValue.get('r'); + let tokens = rValue && rValue.tokens; + if (!tokens) { + throw new Error('tokens is undefined'); } - tokens = _.get(_.get(this.model, 'p'), 'p').tokens; - for (const token of tokens) { - _.set(parameters, tokens, ''); + tokens.forEach((n, i) => { + functionsForJs[n] = rvals[i]; + }); + + const pValue = pRootValue && pRootValue.get('p'); + tokens = pValue && pValue.tokens; + if (!tokens) { + throw new Error('tokens is undefined'); } + tokens.forEach((n, i) => { + functionsForJs[n] = rvals[i]; + }); - result = expression.evaluate(parameters); + result = expression.evaluate(functionsForJs); logPrint(`Result: ${result}`); if (result) { @@ -421,11 +440,12 @@ export class Enforcer { logPrint(`Rule Results: ${policyEffects}`); - result = this.eft.mergeEffects( - _.get(_.get(this.model, 'e'), 'e').value, - policyEffects, - matcherResults - ); + const eRootMapValue = this.model.model.get('e'); + const eMap = eRootMapValue && eRootMapValue.get('e'); + if (eMap) { + result = this.eft.mergeEffects(eMap.value, policyEffects, matcherResults); + } + // only generate the request --> result string if the message // is going to be logged. if (getEnableLog()) { @@ -444,15 +464,3 @@ export class Enforcer { return result; } } - -function getValueFromMap(map: Map, ...param: any[]): any { - let result = null; - param.forEach(n => { - if (!map) { - return; - } - result = map.get(n); - map = result; - }); - return result; -} From e3314cc870d2f809e0f8436fb95c16d7bc855414 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 31 Jul 2018 23:01:31 +0800 Subject: [PATCH 077/497] Add lodash to dependency. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3d1f2d0c..57fe0f35 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "husky": "^0.14.3", "jest": "^23.4.2", "lint-staged": "^7.2.0", + "lodash": "^4.17.10", "prettier": "^1.13.7", "rollup": "^0.62.0", "rollup-plugin-node-resolve": "^3.3.0", From d2a8e44aeef0313fef6939f110d8e208ada52e81 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 00:06:09 +0800 Subject: [PATCH 078/497] Fix read file --- src/config.ts | 2 +- src/persist/defaultFilteredAdapter.ts | 2 +- src/persist/fileAdapter.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/config.ts b/src/config.ts index ab5c803a..2d77a7b8 100644 --- a/src/config.ts +++ b/src/config.ts @@ -76,7 +76,7 @@ export class Config { private parseBuffer(buf: Buffer): void { let section = ''; - const lines = buf.toString().split('\r'); + const lines = buf.toString().split('\n'); lines.forEach((n, index) => { const line = n.trim(); if (line.startsWith(Config.DEFAULT_COMMENT)) { diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 66721204..66a7b2ba 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -45,7 +45,7 @@ export class DefaultFilteredAdapter extends FileAdapter handler: (line: string, model: Model) => void ) { const bodyBuf = readFileSync(this.filePath); - const lines = bodyBuf.toString().split('\r'); + const lines = bodyBuf.toString().split('\n'); lines.forEach((n, index) => { const line = n.trim(); if (!line || DefaultFilteredAdapter.filterLine(line, filter)) { diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index ccaf1133..9d10ab34 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -31,7 +31,7 @@ export class FileAdapter implements Adapter { handler: (line: string, model: Model) => void ) { const bodyBuf = readFileSync(this.filePath); - const lines = bodyBuf.toString().split('\r'); + const lines = bodyBuf.toString().split('\n'); lines.forEach((n, index) => { const line = n.trim(); if (!line) { From 273933c0ab56ee883f85f990afb5c655e4e142e1 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 1 Aug 2018 00:15:30 +0800 Subject: [PATCH 079/497] :fire: debug logs --- src/enforcer.ts | 8 ++++++-- src/model/model.ts | 6 +++++- test/model.test.ts | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 143b216b..08756a54 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -78,8 +78,10 @@ export class Enforcer { let parsedParamLen = 0; if (params.length >= 1) { const enableLog = params[params.length - 1]; - setEnableLog(enableLog); - parsedParamLen++; + if (typeof enableLog === 'boolean') { + setEnableLog(enableLog); + parsedParamLen++; + } } if (params.length - parsedParamLen === 2) { @@ -120,6 +122,7 @@ export class Enforcer { // initWithAdapter initializes an enforcer with a database adapter. public initWithAdapter(modelPath: string, adapter: Adapter): void { const m = Enforcer.newModel(modelPath, ''); + // console.log('modelPath, ', modelPath); this.initWithModelAndAdapter(m, adapter); this.modelPath = modelPath; @@ -319,6 +322,7 @@ export class Enforcer { }); } + // console.log('this.model.model: ', this.model.model); const astItem = [...(this.model.model.get('m') || [])].find( ([key]) => key === 'm' ); diff --git a/src/model/model.ts b/src/model/model.ts index 2c9c8b36..385782ef 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -39,6 +39,7 @@ export class Model { } private loadAssertion(cfg: Config, sec: string, key: string): boolean { + // console.log('loadAssertion: ', sec, key); const secName = sectionNameMap[sec]; const value = cfg.getString(`${secName}::${key}`); return this.addDef(sec, key, value); @@ -49,10 +50,11 @@ export class Model { return ''; } - return i.toString(); + return _.toString(i); } private loadSection(cfg: Config, sec: string): void { + // console.log('loadSection: ', sec); let i = 1; for (;;) { if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { @@ -65,6 +67,7 @@ export class Model { // addDef adds an assertion to the model. public addDef(sec: string, key: string, value: string): boolean { + // console.log('addDef: ', sec, key. value); if (value === '') { return false; } @@ -92,6 +95,7 @@ export class Model { // loadModel loads the model from model CONF file. public loadModel(path: string): void { + // console.log('loadModel: ', path); const cfg = Config.newConfig(path); this.loadSection(cfg, 'r'); diff --git a/test/model.test.ts b/test/model.test.ts index 3d85c580..4098ddf7 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -27,7 +27,7 @@ class TestUtil { } test('testBasicModel', () => { - const e = new Enforcer( + const e = Enforcer.newEnforcer( 'examples/basic_model.conf', 'examples/basic_policy.csv' ); From 65bef6f65a7410c7461a56266d20d5bcaa35d01b Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 12:48:29 +0800 Subject: [PATCH 080/497] Read file filter blank line --- src/config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/config.ts b/src/config.ts index 2d77a7b8..86cb2db7 100644 --- a/src/config.ts +++ b/src/config.ts @@ -77,8 +77,11 @@ export class Config { private parseBuffer(buf: Buffer): void { let section = ''; const lines = buf.toString().split('\n'); + lines.forEach((n, index) => { const line = n.trim(); + if (!line) { return; } + if (line.startsWith(Config.DEFAULT_COMMENT)) { return; } else if (line.startsWith(Config.DEFAULT_COMMENT_SEM)) { From 6415a52553c5c108e22ed77c0f09ccd2a519e4b1 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 13:39:14 +0800 Subject: [PATCH 081/497] Fix data parsing error --- src/config.ts | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/config.ts b/src/config.ts index 86cb2db7..acb8ffee 100644 --- a/src/config.ts +++ b/src/config.ts @@ -80,7 +80,9 @@ export class Config { lines.forEach((n, index) => { const line = n.trim(); - if (!line) { return; } + if (!line) { + return; + } if (line.startsWith(Config.DEFAULT_COMMENT)) { return; @@ -89,17 +91,23 @@ export class Config { } else if (line.startsWith('[') && line.endsWith(']')) { section = line.substring(1, line.length - 1); } else { - const optionVal = line.split('=', 2); - if (optionVal.length !== 2) { - throw new Error( - `parse the content error : line ${index + 1} , %s = ${ - optionVal[0] - } ` - ); + const [option] = line.split('='); + + const optionIndex = line.indexOf(option); + if (optionIndex === -1) { + throw new Error(`parse the content error : line ${index + 1}`); + } + + let value = line.substring(optionIndex + 1).trim(); + if (value.startsWith('=')) { + value = value.substring(1); + } + + if (option && value) { + this.addConfig(section, option.trim(), value.trim()); + } else { + throw new Error(`parse the content error : line ${index + 1}`); } - const option = optionVal[0].trim(); - const value = optionVal[1].trim(); - this.addConfig(section, option, value); } }); } From 9282f0e107d073e03ac24f973e95447024c0bb97 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 15:25:06 +0800 Subject: [PATCH 082/497] Add test for Valuate class --- test/testUtil.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/testUtil.ts b/test/testUtil.ts index 34eb5142..3b839df9 100644 --- a/test/testUtil.ts +++ b/test/testUtil.ts @@ -1,3 +1,12 @@ -test('add test', () => { +import { Valuate } from '../src/util'; + +test('jest', () => { console.log('hello jest'); }); + +test('Valuate', () => { + let ast = Valuate.parse('1 + 1 === 2'); + expect(new Valuate().evaluate(ast)).toEqual(true); + ast = Valuate.parse('1 + 1 !== 2'); + expect(new Valuate().evaluate(ast)).toEqual(false); +}); From c5e506dae5d7cbb123087c636321ff0f48bcd0d4 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 15:29:26 +0800 Subject: [PATCH 083/497] Add Valuate class --- src/util/index.ts | 1 + src/util/valuate.ts | 170 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 src/util/valuate.ts diff --git a/src/util/index.ts b/src/util/index.ts index 7eebf6c9..8d09bbdb 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -15,3 +15,4 @@ export * from './operators'; export * from './log'; export * from './util'; +export * from './valuate'; diff --git a/src/util/valuate.ts b/src/util/valuate.ts new file mode 100644 index 00000000..819fc906 --- /dev/null +++ b/src/util/valuate.ts @@ -0,0 +1,170 @@ +/** + * JavaScript expression parsing and evaluation, safely. + * code from https://github.com/donmccurdy/expression-eval + * Powered by jsep. + */ +import * as jsep from 'jsep'; + +export class Valuate { + /* tslint:disable */ + public binops: any = { + '||'(a: any, b: any) { + return a || b; + }, + '&&'(a: any, b: any) { + return a && b; + }, + '|'(a: any, b: any) { + return a | b; + }, + '^'(a: any, b: any) { + return a ^ b; + }, + '&'(a: any, b: any) { + return a & b; + }, + '=='(a: any, b: any) { + return a == b; + }, + '!='(a: any, b: any) { + return a != b; + }, + '==='(a: any, b: any) { + return a === b; + }, + '!=='(a: any, b: any) { + return a !== b; + }, + '<'(a: any, b: any) { + return a < b; + }, + '>'(a: any, b: any) { + return a > b; + }, + '<='(a: any, b: any) { + return a <= b; + }, + '>='(a: any, b: any) { + return a >= b; + }, + '<<'(a: any, b: any) { + return a << b; + }, + '>>'(a: any, b: any) { + return a >> b; + }, + '>>>'(a: any, b: any) { + return a >>> b; + }, + '+'(a: any, b: any) { + return a + b; + }, + '-'(a: any, b: any) { + return a - b; + }, + '*'(a: any, b: any) { + return a * b; + }, + '/'(a: any, b: any) { + return a / b; + }, + '%'(a: any, b: any) { + return a % b; + } + }; + + public unops: any = { + '-'(a: any) { + return -a; + }, + '+'(a: any) { + return a; + }, + '~'(a: any) { + return ~a; + }, + '!'(a: any) { + return !a; + } + }; + + public evaluateArray(list: any, context: object) { + return list.map((v: any) => this.evaluate(v, context)); + } + + public evaluateMember(node: any, context: object) { + const object: any = this.evaluate(node.object, context); + if (node.computed) { + return [object, object[this.evaluate(node.property, context)]]; + } else { + return [object, object[node.property.name]]; + } + } + + public evaluate(node: any, context?: any): any { + if (!context) { + context = {}; + } + switch (node.type) { + case 'ArrayExpression': + return this.evaluateArray(node.elements, context); + + case 'BinaryExpression': + return this.binops[node.operator]( + this.evaluate(node.left, context), + this.evaluate(node.right, context) + ); + + case 'CallExpression': + let caller, fn, assign; + if (node.callee.type === 'MemberExpression') { + assign = this.evaluateMember(node.callee, context); + caller = assign[0]; + fn = assign[1]; + } else { + fn = this.evaluate(node.callee, context); + } + if (typeof fn !== 'function') { + return undefined; + } + return fn.apply(caller, this.evaluateArray(node.arguments, context)); + + case 'ConditionalExpression': + return this.evaluate(node.test, context) + ? this.evaluate(node.consequent, context) + : this.evaluate(node.alternate, context); + + case 'Identifier': + return context[node.name]; + + case 'Literal': + return node.value; + + case 'LogicalExpression': + return this.binops[node.operator]( + this.evaluate(node.left, context), + this.evaluate(node.right, context) + ); + + case 'MemberExpression': + return this.evaluateMember(node, context)[1]; + + case 'ThisExpression': + return context; + + case 'UnaryExpression': + return this.unops[node.operator](this.evaluate(node.argument, context)); + + default: + return undefined; + } + } + + public compile(expression: any) { + return this.evaluate.bind(null, jsep(expression)); + } + + public static parse(val: string | jsep.Expression): jsep.Expression { + return jsep(val); + } +} From f02eb72057503bff359ff7926b78df00814ec679 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 15:31:33 +0800 Subject: [PATCH 084/497] Update expression parsing engine --- src/enforcer.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 08756a54..cc8d1a9d 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -16,13 +16,13 @@ import { generateGFunction, getEnableLog, logPrint, - setEnableLog + setEnableLog, + Valuate } from './util'; import { FunctionMap, Model } from './model'; import { DefaultEffector, Effect, Effector } from './effect'; import * as _ from 'lodash'; -import { Parser } from 'expr-eval'; import { Adapter, DefaultFilteredAdapter, @@ -336,7 +336,7 @@ export class Enforcer { functionsForJs[key] = value; }); - const expression = Parser.parse(ast.value); + const expression = Valuate.parse(ast.value); let result: boolean = false; @@ -372,7 +372,7 @@ export class Enforcer { functionsForJs[n] = rvals[index]; }); - result = expression.evaluate(functionsForJs); + result = new Valuate().evaluate(expression, functionsForJs); logPrint(`Result: ${result}`); if (typeof result === 'boolean') { @@ -431,8 +431,7 @@ export class Enforcer { tokens.forEach((n, i) => { functionsForJs[n] = rvals[i]; }); - - result = expression.evaluate(functionsForJs); + result = new Valuate().evaluate(expression, functionsForJs); logPrint(`Result: ${result}`); if (result) { From cc9c7164e7b1d0f8b4ced537b4bf1bd2989c7bf8 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 15:33:15 +0800 Subject: [PATCH 085/497] Add jsep and remove expr-eval dependency --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 57fe0f35..80d801e9 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,9 @@ "typescript": "^2.9.2" }, "dependencies": { - "expr-eval": "^1.2.2", "fs-extra": "^7.0.0", "ip": "^1.1.5", + "jsep": "^0.3.4", "lodash": "^4.17.10" }, "homepage": "http://casbin.org", diff --git a/yarn.lock b/yarn.lock index ee8b6e21..a07497c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -984,10 +984,6 @@ expect@^23.4.0: jest-message-util "^23.4.0" jest-regex-util "^23.3.0" -expr-eval@^1.2.2: - version "1.2.2" - resolved "http://registry.npm.taobao.org/expr-eval/download/expr-eval-1.2.2.tgz#8b1a160b814e67da7652007e2693714895221ea0" - extend-shallow@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -2071,6 +2067,10 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" +jsep@^0.3.4: + version "0.3.4" + resolved "http://registry.npm.taobao.org/jsep/download/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" + jsesc@^1.3.0: version "1.3.0" resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" From 908f0f0c5fe39aeb93adbf951af06cc12d431a2b Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 1 Aug 2018 15:43:21 +0800 Subject: [PATCH 086/497] Finish the testBasicModel test. --- test/model.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/model.test.ts b/test/model.test.ts index 4098ddf7..f204bbdb 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -33,4 +33,11 @@ test('testBasicModel', () => { ); TestUtil.testEnforce(e, 'alice', 'data1', 'read', true); + TestUtil.testEnforce(e, 'alice', 'data1', 'write', false); + TestUtil.testEnforce(e, 'alice', 'data2', 'read', false); + TestUtil.testEnforce(e, 'alice', 'data2', 'write', false); + TestUtil.testEnforce(e, 'bob', 'data1', 'read', false); + TestUtil.testEnforce(e, 'bob', 'data1', 'write', false); + TestUtil.testEnforce(e, 'bob', 'data2', 'read', false); + TestUtil.testEnforce(e, 'bob', 'data2', 'write', true); }); From 069e0eaceee67dcb2546c3d48c4e6a3126edbcb3 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 1 Aug 2018 18:15:35 +0800 Subject: [PATCH 087/497] :white_check_mark: add util test file --- src/util/operators.ts | 3 +- test/util.test.ts | 74 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 test/util.test.ts diff --git a/src/util/operators.ts b/src/util/operators.ts index 677ab189..7d3b1c65 100644 --- a/src/util/operators.ts +++ b/src/util/operators.ts @@ -103,7 +103,7 @@ const regexMatch: (key1: string, key2: string) => boolean = ( key1: string, key2: string ) => { - return new RegExp(key2).test(key1); // key1.match(key2); + return new RegExp(key2).test(key1); }; // regexMatchFunc is the wrapper for RegexMatch. @@ -133,6 +133,7 @@ const IPMatch: (ip1: string, ip2: string) => boolean = ( return ip.cidrSubnet(ip2).contains(ip1); } else { if (!(ip.isV4Format(ip2) || ip.isV6Format(ip2))) { + console.log(ip2); throw new Error( 'invalid argument: ip2 in IPMatch() function is not an IP address.' ); diff --git a/test/util.test.ts b/test/util.test.ts new file mode 100644 index 00000000..7f034508 --- /dev/null +++ b/test/util.test.ts @@ -0,0 +1,74 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as util from '../src/util'; + +test('test enableLog success', () => { + util.setEnableLog(true); + expect(util.getEnableLog()).toEqual(true); + util.setEnableLog(false); + expect(util.getEnableLog()).toEqual(false); +}); + +test('test enableLog failed', () => { + util.setEnableLog(true); + expect(util.getEnableLog()).not.toEqual(false); + util.setEnableLog(false); + expect(util.getEnableLog()).not.toEqual(true); +}); + +test('test logPrint', () => { + util.setEnableLog(true); + expect(util.logPrint('test log')).toBeUndefined(); +}); + +test('test logPrintf', () => { + util.setEnableLog(true); + expect(util.logPrintf('format', 'test log')).toBeUndefined(); +}); + +test('test regexMatchFunc', () => { + expect(util.regexMatchFunc('foobar', '^foo*')).toEqual(true); + expect(util.regexMatchFunc('barfoo', '^foo*')).toEqual(false); +}); + +test('test keyMatchFunc', () => { + expect(util.keyMatchFunc('/foo/bar', '/foo/*')).toEqual(true); + expect(util.keyMatchFunc('/bar/foo', '/foo/*')).toEqual(false); +}); + +test('test keyMatch2Func', () => { + expect(util.keyMatch2Func('/foo/bar', '/foo/*')).toEqual(true); + expect(util.keyMatch2Func('/foo/baz', '/foo/:bar')).toEqual(true); + expect(util.keyMatch2Func('/foo/baz/foo', '/foo/:bar/foo')).toEqual(true); + expect(util.keyMatch2Func('/baz', '/foo')).toEqual(false); +}); + +test('test keyMatch3Func', () => { + expect(util.keyMatch3Func('/foo/bar', '/foo/*')).toEqual(true); + expect(util.keyMatch3Func('/foo/baz', '/foo/{bar}')).toEqual(true); + expect(util.keyMatch3Func('/foo/baz/foo', '/foo/{bar}/foo')).toEqual(true); + expect(util.keyMatch3Func('/baz', '/foo')).toEqual(false); +}); + +test.only('test IPMatchFunc', () => { + expect(util.IPMatchFunc('::1', '::0:1')).toEqual(true); + expect(util.IPMatchFunc('192.168.1.1', '192.168.1.1')).toEqual(true); + expect(util.IPMatchFunc('127.0.0.1', '::ffff:127.0.0.1')).toEqual(true); + expect(util.IPMatchFunc('192.168.2.123', '192.168.2.0/24')).toEqual(true); + expect(util.IPMatchFunc('::1', '127.0.0.2')).toEqual(false); + // expect(util.IPMatchFunc('i am chaplin', '127.0.0.1')).toThrow(); + // expect(util.IPMatchFunc('127.0.0.1', 'i am chaplin')).toThrow(); + expect(util.IPMatchFunc('192.168.1.189', '192.168.1.134/26')).toEqual(false); +}); From 8fb6839f3aeabbdd8edea71342292f9267590b08 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 1 Aug 2018 20:43:39 +0800 Subject: [PATCH 088/497] Shorten TestUtil to T. --- test/model.test.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/model.test.ts b/test/model.test.ts index f204bbdb..a7399d0b 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -14,7 +14,7 @@ import { Enforcer } from '../src/enforcer'; -class TestUtil { +class T { public static testEnforce( e: Enforcer, sub: string, @@ -32,12 +32,12 @@ test('testBasicModel', () => { 'examples/basic_policy.csv' ); - TestUtil.testEnforce(e, 'alice', 'data1', 'read', true); - TestUtil.testEnforce(e, 'alice', 'data1', 'write', false); - TestUtil.testEnforce(e, 'alice', 'data2', 'read', false); - TestUtil.testEnforce(e, 'alice', 'data2', 'write', false); - TestUtil.testEnforce(e, 'bob', 'data1', 'read', false); - TestUtil.testEnforce(e, 'bob', 'data1', 'write', false); - TestUtil.testEnforce(e, 'bob', 'data2', 'read', false); - TestUtil.testEnforce(e, 'bob', 'data2', 'write', true); + T.testEnforce(e, 'alice', 'data1', 'read', true); + T.testEnforce(e, 'alice', 'data1', 'write', false); + T.testEnforce(e, 'alice', 'data2', 'read', false); + T.testEnforce(e, 'alice', 'data2', 'write', false); + T.testEnforce(e, 'bob', 'data1', 'read', false); + T.testEnforce(e, 'bob', 'data1', 'write', false); + T.testEnforce(e, 'bob', 'data2', 'read', false); + T.testEnforce(e, 'bob', 'data2', 'write', true); }); From 89228450a6ee12895a6f71612235d8197b1228a4 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 1 Aug 2018 21:21:07 +0800 Subject: [PATCH 089/497] Remove prettier. --- package.json | 2 -- src/model/model.ts | 20 +++--------------- src/persist/adapter.ts | 6 +----- src/persist/defaultFilteredAdapter.ts | 5 +---- src/persist/fileAdapter.ts | 10 ++------- src/util/operators.ts | 29 ++++++--------------------- src/util/util.ts | 15 +++----------- test/model.test.ts | 13 ++---------- 8 files changed, 18 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 80d801e9..d641cf6b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,6 @@ "typings": "lib/casbin.d.ts", "scripts": { "precommit": "lint-staged", - "prettier": "prettier --write \"src/**/*.ts\" \"scripts/**/*.js\"", "build": "node scripts/build.js", "lint": "tslint \"src/**/*.ts\"", "fix": "tslint \"src/**/*.ts\" --fix", @@ -47,7 +46,6 @@ ], "lint-staged": { "*.{ts,js}": [ - "prettier --write", "tslint --fix", "git add" ] diff --git a/src/model/model.ts b/src/model/model.ts index 385782ef..12b897c6 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -209,12 +209,7 @@ export class Model { } // getFilteredPolicy gets rules based on field filters from a policy. - public getFilteredPolicy( - sec: string, - key: string, - fieldIndex: number, - ...fieldValues: string[] - ): string[][] { + public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): string[][] { const res = []; const astMap = _.get(this.model, sec); @@ -238,12 +233,7 @@ export class Model { } // removeFilteredPolicy removes policy rules based on field filters from the model. - public removeFilteredPolicy( - sec: string, - key: string, - fieldIndex: number, - ...fieldValues: string[] - ): boolean { + public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): boolean { const res = []; let bool = false; @@ -271,11 +261,7 @@ export class Model { } // getValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed. - public getValuesForFieldInPolicy( - sec: string, - key: string, - fieldIndex: number - ): string[] { + public getValuesForFieldInPolicy(sec: string, key: string, fieldIndex: number): string[] { const values = []; const astMap = _.get(this.model, sec); diff --git a/src/persist/adapter.ts b/src/persist/adapter.ts index 52ce4dd4..f5de9ea0 100644 --- a/src/persist/adapter.ts +++ b/src/persist/adapter.ts @@ -23,10 +23,6 @@ export interface Adapter { removePolicy(sec: string, ptype: string, rule: string[]): void; - removeFilteredPolicy( - sec: string, - ptype: string, - fieldIndex: number, - ...fieldValues: string[] + removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[] ): void; } diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 66a7b2ba..6da37839 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -39,10 +39,7 @@ export class DefaultFilteredAdapter extends FileAdapter this.filtered = true; } - private loadFilteredPolicyFile( - model: Model, - filter: Filter, - handler: (line: string, model: Model) => void + private loadFilteredPolicyFile(model: Model, filter: Filter, handler: (line: string, model: Model) => void ) { const bodyBuf = readFileSync(this.filePath); const lines = bodyBuf.toString().split('\n'); diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 9d10ab34..18b3f2a5 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -26,9 +26,7 @@ export class FileAdapter implements Adapter { this.loadPolicyFile(model, Helper.loadPolicyLine); } - private loadPolicyFile( - model: Model, - handler: (line: string, model: Model) => void + private loadPolicyFile(model: Model, handler: (line: string, model: Model) => void ) { const bodyBuf = readFileSync(this.filePath); const lines = bodyBuf.toString().split('\n'); @@ -98,11 +96,7 @@ export class FileAdapter implements Adapter { /** * removeFilteredPolicy removes policy rules that match the filter from the storage. */ - public removeFilteredPolicy( - sec: string, - ptype: string, - fieldIndex: number, - ...fieldValues: string[] + public removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[] ): void { throw new Error('not implemented'); } diff --git a/src/util/operators.ts b/src/util/operators.ts index 7d3b1c65..4aae476a 100644 --- a/src/util/operators.ts +++ b/src/util/operators.ts @@ -19,10 +19,7 @@ import * as _ from 'lodash'; // keyMatch determines whether key1 matches the pattern of key2 (similar to RESTful path), // key2 can contain a *. // For example, '/foo/bar' matches '/foo/*' -const keyMatch: (key1: string, key2: string) => boolean = ( - key1: string, - key2: string -) => { +const keyMatch: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { const pos: number = key2.indexOf('*'); if (pos === -1) { return key1 === key2; @@ -46,10 +43,7 @@ const keyMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { // keyMatch2 determines whether key1 matches the pattern of key2 (similar to RESTful path), // key2 can contain a *. // For example, '/foo/bar' matches '/foo/*', '/resource1' matches '/:resource' -const keyMatch2: (key1: string, key2: string) => boolean = ( - key1: string, - key2: string -) => { +const keyMatch2: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { key2 = key2.replace(/\/\*/g, '/.*'); const regexp: RegExp = new RegExp(/(.*):[^/]+(.*)/g); @@ -73,10 +67,7 @@ const keyMatch2Func: (...args: any[]) => boolean = (...args: any[]) => { // keyMatch3 determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. // For example, '/foo/bar' matches '/foo/*', '/resource1' matches '/{resource}' -const keyMatch3: (key1: string, key2: string) => boolean = ( - key1: string, - key2: string -) => { +const keyMatch3: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { key2 = key2.replace(/\/\*/g, '/.*'); const regexp: RegExp = new RegExp(/(.*){[^/]+}(.*)/g); @@ -99,10 +90,7 @@ const keyMatch3Func: (...args: any[]) => boolean = (...args: any[]) => { }; // regexMatch determines whether key1 matches the pattern of key2 in regular expression. -const regexMatch: (key1: string, key2: string) => boolean = ( - key1: string, - key2: string -) => { +const regexMatch: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { return new RegExp(key2).test(key1); }; @@ -117,10 +105,7 @@ const regexMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { // IPMatch determines whether IP address ip1 matches the pattern of IP address ip2, // ip2 can be an IP address or a CIDR pattern. // For example, '192.168.2.123' matches '192.168.2.0/24' -const IPMatch: (ip1: string, ip2: string) => boolean = ( - ip1: string, - ip2: string -) => { +const IPMatch: (ip1: string, ip2: string) => boolean = (ip1: string, ip2: string) => { // check ip1 if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { throw new Error( @@ -151,9 +136,7 @@ const IPMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { }; // generateGFunction is the factory method of the g(_, _) function. -const generateGFunction: (rm: rbac.RoleManager) => any = ( - rm: rbac.RoleManager -) => { +const generateGFunction: (rm: rbac.RoleManager) => any = (rm: rbac.RoleManager) => { const func: (...args: any[]) => boolean = (...args: any[]) => { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); diff --git a/src/util/util.ts b/src/util/util.ts index ea250715..1d95da54 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -30,18 +30,12 @@ const removeComments: (s: string) => string = (s: string) => { }; // arrayEquals determines whether two string arrays are identical. -const arrayEquals: (a: string[], b: string[]) => boolean = ( - a: string[], - b: string[] -) => { +const arrayEquals: (a: string[], b: string[]) => boolean = (a: string[], b: string[]) => { return _.isEqual(a, b); }; // array2DEquals determines whether two 2-dimensional string arrays are identical. -const array2DEquals: (a: [string[]], b: [string[]]) => boolean = ( - a: [string[]], - b: [string[]] -) => { +const array2DEquals: (a: [string[]], b: [string[]]) => boolean = (a: [string[]], b: [string[]]) => { return _.isEqual(a, b); }; @@ -61,10 +55,7 @@ const paramsToString: (...v: string[]) => string = (...v: string[]) => { }; // setEquals determines whether two string sets are identical. -const setEquals: (a: string[], b: string[]) => boolean = ( - a: string[], - b: string[] -) => { +const setEquals: (a: string[], b: string[]) => boolean = (a: string[], b: string[]) => { return _.isEqual(_.sortedUniq(a), _.sortedUniq(b)); }; diff --git a/test/model.test.ts b/test/model.test.ts index a7399d0b..0f6d02b8 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -15,22 +15,13 @@ import { Enforcer } from '../src/enforcer'; class T { - public static testEnforce( - e: Enforcer, - sub: string, - obj: string, - act: string, - res: boolean - ): void { + public static testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); } } test('testBasicModel', () => { - const e = Enforcer.newEnforcer( - 'examples/basic_model.conf', - 'examples/basic_policy.csv' - ); + const e = Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); T.testEnforce(e, 'alice', 'data1', 'read', true); T.testEnforce(e, 'alice', 'data1', 'write', false); From 87010fc07334d3f46eec13f5f954774fe84f8825 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 1 Aug 2018 21:47:55 +0800 Subject: [PATCH 090/497] Move testEnforce() outside of the class. --- test/model.test.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/test/model.test.ts b/test/model.test.ts index 0f6d02b8..570213bf 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -14,21 +14,19 @@ import { Enforcer } from '../src/enforcer'; -class T { - public static testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { - expect(e.enforce(sub, obj, act)).toBe(res); - } +function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { + expect(e.enforce(sub, obj, act)).toBe(res); } test('testBasicModel', () => { const e = Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - T.testEnforce(e, 'alice', 'data1', 'read', true); - T.testEnforce(e, 'alice', 'data1', 'write', false); - T.testEnforce(e, 'alice', 'data2', 'read', false); - T.testEnforce(e, 'alice', 'data2', 'write', false); - T.testEnforce(e, 'bob', 'data1', 'read', false); - T.testEnforce(e, 'bob', 'data1', 'write', false); - T.testEnforce(e, 'bob', 'data2', 'read', false); - T.testEnforce(e, 'bob', 'data2', 'write', true); + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); }); From f8344488c22d5112c56b89002938b3d8d5dac3c9 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 1 Aug 2018 22:03:45 +0800 Subject: [PATCH 091/497] Add entry --- src/casbin.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/casbin.ts diff --git a/src/casbin.ts b/src/casbin.ts new file mode 100644 index 00000000..b6b820a4 --- /dev/null +++ b/src/casbin.ts @@ -0,0 +1 @@ +export * from './enforcer'; From e01a27bb359b132f5db09e45a3d4a8b24302b9b7 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 1 Aug 2018 22:14:57 +0800 Subject: [PATCH 092/497] Add testBasicModelNoPolicy to model's test. --- test/model.test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/model.test.ts b/test/model.test.ts index 570213bf..72cd906c 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -30,3 +30,16 @@ test('testBasicModel', () => { testEnforce(e, 'bob', 'data2', 'read', false); testEnforce(e, 'bob', 'data2', 'write', true); }); + +test('testBasicModelNoPolicy', () => { + const e = Enforcer.newEnforcer('examples/basic_model.conf'); + + testEnforce(e, 'alice', 'data1', 'read', false); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', false); +}); From 87c503d06a438233cf8dc5d8772f182e7796082c Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 1 Aug 2018 22:21:53 +0800 Subject: [PATCH 093/497] Add testKeyMatchModelInMemory to enforcer's test. --- test/enforcer.test.ts | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 test/enforcer.test.ts diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts new file mode 100644 index 00000000..a2ee8307 --- /dev/null +++ b/test/enforcer.test.ts @@ -0,0 +1,79 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Enforcer } from '../src/enforcer'; +import { FileAdapter } from '../src/persist'; + +function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { + expect(e.enforce(sub, obj, act)).toBe(res); +} + +test('testKeyMatchModelInMemory', () => { + const m = Enforcer.newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); + + const a = new FileAdapter('examples/keymatch_policy.csv'); + + let e = Enforcer.newEnforcer(m, a); + + testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); + testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); + testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); + testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); + testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); + testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); + testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); + + testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); + testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); + testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); + testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); + testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); + testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); + testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); + testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); + + testEnforce(e, 'cathy', '/cathy_data', 'GET', true); + testEnforce(e, 'cathy', '/cathy_data', 'POST', true); + testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); + + e = Enforcer.newEnforcer(m); + a.loadPolicy(e.getModel()); + + testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); + testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); + testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); + testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); + testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); + testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); + testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); + + testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); + testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); + testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); + testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); + testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); + testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); + testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); + testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); + + testEnforce(e, 'cathy', '/cathy_data', 'GET', true); + testEnforce(e, 'cathy', '/cathy_data', 'POST', true); + testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); +}); From fe0e09a8b4066101ccf2b8f0a5237384091681b8 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Wed, 1 Aug 2018 23:43:01 +0800 Subject: [PATCH 094/497] :art: through the IPMatchFunc and Valuate test case --- test/testUtil.ts | 12 ------------ test/util.test.ts | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 16 deletions(-) delete mode 100644 test/testUtil.ts diff --git a/test/testUtil.ts b/test/testUtil.ts deleted file mode 100644 index 3b839df9..00000000 --- a/test/testUtil.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Valuate } from '../src/util'; - -test('jest', () => { - console.log('hello jest'); -}); - -test('Valuate', () => { - let ast = Valuate.parse('1 + 1 === 2'); - expect(new Valuate().evaluate(ast)).toEqual(true); - ast = Valuate.parse('1 + 1 !== 2'); - expect(new Valuate().evaluate(ast)).toEqual(false); -}); diff --git a/test/util.test.ts b/test/util.test.ts index 7f034508..7f80271d 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -13,6 +13,7 @@ // limitations under the License. import * as util from '../src/util'; +import { Valuate } from '../src/util'; test('test enableLog success', () => { util.setEnableLog(true); @@ -38,6 +39,13 @@ test('test logPrintf', () => { expect(util.logPrintf('format', 'test log')).toBeUndefined(); }); +test('test Valuate', () => { + let ast = Valuate.parse('1 + 1 === 2'); + expect(new Valuate().evaluate(ast)).toEqual(true); + ast = Valuate.parse('1 + 1 !== 2'); + expect(new Valuate().evaluate(ast)).toEqual(false); +}); + test('test regexMatchFunc', () => { expect(util.regexMatchFunc('foobar', '^foo*')).toEqual(true); expect(util.regexMatchFunc('barfoo', '^foo*')).toEqual(false); @@ -62,13 +70,13 @@ test('test keyMatch3Func', () => { expect(util.keyMatch3Func('/baz', '/foo')).toEqual(false); }); -test.only('test IPMatchFunc', () => { +test('test IPMatchFunc', () => { expect(util.IPMatchFunc('::1', '::0:1')).toEqual(true); expect(util.IPMatchFunc('192.168.1.1', '192.168.1.1')).toEqual(true); expect(util.IPMatchFunc('127.0.0.1', '::ffff:127.0.0.1')).toEqual(true); expect(util.IPMatchFunc('192.168.2.123', '192.168.2.0/24')).toEqual(true); expect(util.IPMatchFunc('::1', '127.0.0.2')).toEqual(false); - // expect(util.IPMatchFunc('i am chaplin', '127.0.0.1')).toThrow(); - // expect(util.IPMatchFunc('127.0.0.1', 'i am chaplin')).toThrow(); - expect(util.IPMatchFunc('192.168.1.189', '192.168.1.134/26')).toEqual(false); + expect(() => util.IPMatchFunc('i am chaplin', '127.0.0.1')).toThrow(Error); + expect(() => util.IPMatchFunc('127.0.0.1', 'i am chaplin')).toThrow(/invalid/g); + expect(util.IPMatchFunc('192.168.2.189', '192.168.1.134/26')).toEqual(false); }); From 020f561b770e98d4616f9be2800bd823764be026 Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 2 Aug 2018 15:12:39 +0800 Subject: [PATCH 095/497] Add ts-node dependency for vscode debug --- package.json | 1 + yarn.lock | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d641cf6b..145dbfb5 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "rollup": "^0.62.0", "rollup-plugin-node-resolve": "^3.3.0", "ts-jest": "^23.0.1", + "ts-node": "^7.0.0", "tslint": "^5.11.0", "typescript": "^2.9.2" }, diff --git a/yarn.lock b/yarn.lock index a07497c7..398002bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -204,7 +204,7 @@ array-unique@^0.3.2: version "0.3.2" resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arrify@^1.0.1: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -479,6 +479,10 @@ buffer-from@^1.0.0: version "1.1.0" resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" +buffer-from@^1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -832,7 +836,7 @@ detect-newline@^2.1.0: version "2.1.0" resolved "http://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -diff@^3.2.0: +diff@^3.1.0, diff@^3.2.0: version "3.5.0" resolved "http://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -2306,6 +2310,10 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +make-error@^1.1.1: + version "1.3.4" + resolved "http://registry.npm.taobao.org/make-error/download/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" + makeerror@1.0.x: version "1.0.11" resolved "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -3535,6 +3543,19 @@ ts-jest@^23.0.1: pkg-dir "^3.0.0" yargs "^12.0.1" +ts-node@^7.0.0: + version "7.0.0" + resolved "http://registry.npm.taobao.org/ts-node/download/ts-node-7.0.0.tgz#a94a13c75e5e1aa6b82814b84c68deb339ba7bff" + dependencies: + arrify "^1.0.0" + buffer-from "^1.1.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.6" + yn "^2.0.0" + tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -3829,3 +3850,7 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yn@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/yn/download/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" From 7c33a41ced1b33b6956ce13a33fae247cf120f51 Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 2 Aug 2018 15:13:26 +0800 Subject: [PATCH 096/497] Remove .vscode folder --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index fe430a49..0861c72e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -.vscode .idea node_modules lib From 3e7d3d6c18ca3208ba0909ecf8b1e8150e7d2e46 Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 2 Aug 2018 15:14:21 +0800 Subject: [PATCH 097/497] Add vscode debug config --- .vscode/launch.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..5cb28bb7 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "jest:debug", + "type": "node", + "request": "launch", + "args": ["${relativeFile}"], + "program": "${workspaceRoot}/node_modules/jest-cli/bin/jest.js", + "runtimeArgs": ["-r", "ts-node/register"] + }, + { + "name": "ts:debug", + "type": "node", + "request": "launch", + "args": ["-r", "ts-node/register", "${relativeFile}"] + } + ] +} From fb53491265c749de4965e5ebe96d55fb01e8fef4 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 11:55:03 +0800 Subject: [PATCH 098/497] Use constructor (new Enforcer()) instead of newEnforcer(). --- src/enforcer.ts | 46 +++++++++++++--------------------------------- test/model.test.ts | 4 ++-- 2 files changed, 15 insertions(+), 35 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index cc8d1a9d..64695079 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -47,33 +47,16 @@ export class Enforcer { private autoSave: boolean; private autoBuildRoleLinks: boolean; - /** - * constructor is the constructor for Enforcer. - */ - constructor() { - this.modelPath = ''; - this.model = new Model(); - this.fm = new Map(); - this.eft = new DefaultEffector(); - - this.adapter = new DefaultFilteredAdapter(''); - this.rm = new DefaultRoleManager(0); - - this.enabled = false; - this.autoSave = false; - this.autoBuildRoleLinks = false; - } - - // NewEnforcer creates an enforcer via file or DB. + // constructor is the constructor for Enforcer. + // It creates an enforcer via file or DB. // File: - // e := casbin.NewEnforcer("path/to/basic_model.conf", "path/to/basic_policy.csv") + // e := NewEnforcer("path/to/basic_model.conf", "path/to/basic_policy.csv") // MySQL DB: // a := mysqladapter.NewDBAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/") // e := casbin.NewEnforcer("path/to/basic_model.conf", a) - public static newEnforcer(...params: any[]): Enforcer { - const e = new Enforcer(); - e.rm = new DefaultRoleManager(10); - e.eft = new DefaultEffector(); + constructor(...params: any[]) { + this.rm = new DefaultRoleManager(10); + this.eft = new DefaultEffector(); let parsedParamLen = 0; if (params.length >= 1) { @@ -87,30 +70,28 @@ export class Enforcer { if (params.length - parsedParamLen === 2) { if (typeof params[0] === 'string') { if (typeof params[1] === 'string') { - e.initWithFile(params[0].toString(), params[1].toString()); + this.initWithFile(params[0].toString(), params[1].toString()); } else { - e.initWithAdapter(params[0].toString(), params[1]); + this.initWithAdapter(params[0].toString(), params[1]); } } else { if (typeof params[1] === 'string') { throw new Error('Invalid parameters for enforcer.'); } else { - e.initWithModelAndAdapter(params[0], params[1]); + this.initWithModelAndAdapter(params[0], params[1]); } } } else if (params.length - parsedParamLen === 1) { if (typeof params[0] === 'string') { - e.initWithFile(params[0].toString, ''); + this.initWithFile(params[0].toString, ''); } else { - e.initWithModelAndAdapter(params[0], new FileAdapter('')); + this.initWithModelAndAdapter(params[0], new FileAdapter('')); } } else if (params.length === parsedParamLen) { - e.initWithFile('', ''); + this.initWithFile('', ''); } else { throw new Error('Invalid parameters for enforcer.'); } - - return e; } // initWithFile initializes an enforcer with a model file and a policy file. @@ -122,7 +103,6 @@ export class Enforcer { // initWithAdapter initializes an enforcer with a database adapter. public initWithAdapter(modelPath: string, adapter: Adapter): void { const m = Enforcer.newModel(modelPath, ''); - // console.log('modelPath, ', modelPath); this.initWithModelAndAdapter(m, adapter); this.modelPath = modelPath; @@ -131,7 +111,7 @@ export class Enforcer { // initWithModelAndAdapter initializes an enforcer with a model and a database adapter. public initWithModelAndAdapter(m: Model, adapter: Adapter): void { this.adapter = adapter; - // this.watcher = new Watcher(); + this.watcher = null; this.model = m; this.model.printModel(); diff --git a/test/model.test.ts b/test/model.test.ts index 72cd906c..98fd5c5e 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -19,7 +19,7 @@ function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: bo } test('testBasicModel', () => { - const e = Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -32,7 +32,7 @@ test('testBasicModel', () => { }); test('testBasicModelNoPolicy', () => { - const e = Enforcer.newEnforcer('examples/basic_model.conf'); + const e = new Enforcer('examples/basic_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); From 7e5fae8c203c90f1c97ea7e98f317814aa624fd2 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 15:37:22 +0800 Subject: [PATCH 099/497] Fix jest breakpoint --- package.json | 2 +- yarn.lock | 278 ++++++++++++++++++++++++++++++++++----------------- 2 files changed, 189 insertions(+), 91 deletions(-) diff --git a/package.json b/package.json index 145dbfb5..288af6f6 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "prettier": "^1.13.7", "rollup": "^0.62.0", "rollup-plugin-node-resolve": "^3.3.0", - "ts-jest": "^23.0.1", + "ts-jest": "22.4.6", "ts-node": "^7.0.0", "tslint": "^5.11.0", "typescript": "^2.9.2" diff --git a/yarn.lock b/yarn.lock index 398002bf..5d665533 100644 --- a/yarn.lock +++ b/yarn.lock @@ -266,7 +266,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.26.0: +babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3: version "6.26.3" resolved "http://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" dependencies: @@ -332,6 +332,10 @@ babel-plugin-istanbul@^4.1.6: istanbul-lib-instrument "^1.10.1" test-exclude "^4.2.1" +babel-plugin-jest-hoist@^22.4.4: + version "22.4.4" + resolved "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" + babel-plugin-jest-hoist@^23.2.0: version "23.2.0" resolved "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" @@ -340,7 +344,30 @@ babel-plugin-syntax-object-rest-spread@^6.13.0: version "6.13.0" resolved "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" -babel-preset-jest@^23.0.0, babel-preset-jest@^23.2.0: +babel-plugin-transform-es2015-modules-commonjs@^6.26.2: + version "6.26.2" + resolved "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "http://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-jest@^22.4.3: + version "22.4.4" + resolved "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" + dependencies: + babel-plugin-jest-hoist "^22.4.4" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-preset-jest@^23.2.0: version "23.2.0" resolved "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" dependencies: @@ -390,7 +417,7 @@ babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: +babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -463,7 +490,7 @@ browser-process-hrtime@^0.1.2: version "0.1.2" resolved "http://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" -browser-resolve@^1.11.3: +browser-resolve@^1.11.2, browser-resolve@^1.11.3: version "1.11.3" resolved "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" dependencies: @@ -760,12 +787,6 @@ decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -decamelize@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" - dependencies: - xregexp "4.0.0" - decode-uri-component@^0.2.0: version "0.2.0" resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -977,6 +998,17 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expect@^22.4.0: + version "22.4.3" + resolved "http://registry.npm.taobao.org/expect/download/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.3" + jest-get-type "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-regex-util "^22.4.3" + expect@^23.4.0: version "23.4.0" resolved "http://registry.npm.taobao.org/expect/download/expect-23.4.0.tgz#6da4ecc99c1471253e7288338983ad1ebadb60c3" @@ -1108,12 +1140,6 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - dependencies: - locate-path "^3.0.0" - for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1146,9 +1172,9 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fs-extra@6.0.1: - version "6.0.1" - resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" +fs-extra@6.0.0: + version "6.0.0" + resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-6.0.0.tgz#0f0afb290bb3deb87978da816fcd3c7797f3a817" dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -1780,7 +1806,23 @@ jest-cli@^23.4.2: which "^1.2.12" yargs "^11.0.0" -jest-config@^23.0.0, jest-config@^23.4.2: +jest-config@^22.4.3, jest-config@^22.4.4: + version "22.4.4" + resolved "http://registry.npm.taobao.org/jest-config/download/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.4" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" + pretty-format "^22.4.0" + +jest-config@^23.4.2: version "23.4.2" resolved "http://registry.npm.taobao.org/jest-config/download/jest-config-23.4.2.tgz#62a105e14b8266458f2bf4d32403b2c44418fa77" dependencies: @@ -1798,6 +1840,15 @@ jest-config@^23.0.0, jest-config@^23.4.2: jest-validate "^23.4.0" pretty-format "^23.2.0" +jest-diff@^22.4.0, jest-diff@^22.4.3: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-diff/download/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + jest-diff@^23.2.0: version "23.2.0" resolved "http://registry.npm.taobao.org/jest-diff/download/jest-diff-23.2.0.tgz#9f2cf4b51e12c791550200abc16b47130af1062a" @@ -1820,6 +1871,14 @@ jest-each@^23.4.0: chalk "^2.0.1" pretty-format "^23.2.0" +jest-environment-jsdom@^22.4.1: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + jsdom "^11.5.1" + jest-environment-jsdom@^23.4.0: version "23.4.0" resolved "http://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" @@ -1828,6 +1887,13 @@ jest-environment-jsdom@^23.4.0: jest-util "^23.4.0" jsdom "^11.5.1" +jest-environment-node@^22.4.1: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + jest-environment-node@^23.4.0: version "23.4.0" resolved "http://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" @@ -1835,7 +1901,7 @@ jest-environment-node@^23.4.0: jest-mock "^23.2.0" jest-util "^23.4.0" -jest-get-type@^22.1.0: +jest-get-type@^22.1.0, jest-get-type@^22.4.3: version "22.4.3" resolved "http://registry.npm.taobao.org/jest-get-type/download/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" @@ -1851,6 +1917,22 @@ jest-haste-map@^23.4.1: micromatch "^2.3.11" sane "^2.0.0" +jest-jasmine2@^22.4.4: + version "22.4.4" + resolved "http://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23" + dependencies: + chalk "^2.0.1" + co "^4.6.0" + expect "^22.4.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + source-map-support "^0.5.0" + jest-jasmine2@^23.4.2: version "23.4.2" resolved "http://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-23.4.2.tgz#2fbf52f93e43ed4c5e7326a90bb1d785be4321ac" @@ -1874,6 +1956,14 @@ jest-leak-detector@^23.2.0: dependencies: pretty-format "^23.2.0" +jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + jest-matcher-utils@^23.2.0: version "23.2.0" resolved "http://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-23.2.0.tgz#4d4981f23213e939e3cedf23dc34c747b5ae1913" @@ -1882,6 +1972,16 @@ jest-matcher-utils@^23.2.0: jest-get-type "^22.1.0" pretty-format "^23.2.0" +jest-message-util@^22.4.0, jest-message-util@^22.4.3: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-message-util/download/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + jest-message-util@^23.4.0: version "23.4.0" resolved "http://registry.npm.taobao.org/jest-message-util/download/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" @@ -1892,10 +1992,18 @@ jest-message-util@^23.4.0: slash "^1.0.0" stack-utils "^1.0.1" +jest-mock@^22.4.3: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-mock/download/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" + jest-mock@^23.2.0: version "23.2.0" resolved "http://registry.npm.taobao.org/jest-mock/download/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" +jest-regex-util@^22.1.0, jest-regex-util@^22.4.3: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" + jest-regex-util@^23.3.0: version "23.3.0" resolved "http://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" @@ -1907,6 +2015,13 @@ jest-resolve-dependencies@^23.4.2: jest-regex-util "^23.3.0" jest-snapshot "^23.4.2" +jest-resolve@^22.4.2: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-resolve/download/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + jest-resolve@^23.4.1: version "23.4.1" resolved "http://registry.npm.taobao.org/jest-resolve/download/jest-resolve-23.4.1.tgz#7f3c17104732a2c0c940a01256025ed745814982" @@ -1963,6 +2078,17 @@ jest-serializer@^23.0.1: version "23.0.1" resolved "http://registry.npm.taobao.org/jest-serializer/download/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" +jest-snapshot@^22.4.0: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.3" + jest-snapshot@^23.4.2: version "23.4.2" resolved "http://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-23.4.2.tgz#8fa6130feb5a527dac73e5fa80d86f29f7c42ab6" @@ -1978,6 +2104,18 @@ jest-snapshot@^23.4.2: pretty-format "^23.2.0" semver "^5.5.0" +jest-util@^22.4.1, jest-util@^22.4.3: + version "22.4.3" + resolved "http://registry.npm.taobao.org/jest-util/download/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.3" + mkdirp "^0.5.1" + source-map "^0.6.0" + jest-util@^23.4.0: version "23.4.0" resolved "http://registry.npm.taobao.org/jest-util/download/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" @@ -1991,6 +2129,16 @@ jest-util@^23.4.0: slash "^1.0.0" source-map "^0.6.0" +jest-validate@^22.4.4: + version "22.4.4" + resolved "http://registry.npm.taobao.org/jest-validate/download/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.4" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.4.0" + jest-validate@^23.0.0, jest-validate@^23.4.0: version "23.4.0" resolved "http://registry.npm.taobao.org/jest-validate/download/jest-validate-23.4.0.tgz#d96eede01ef03ac909c009e9c8e455197d48c201" @@ -2259,13 +2407,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - lodash.sortby@^4.7.0: version "4.7.0" resolved "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -2698,24 +2839,12 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - dependencies: - p-try "^2.0.0" - p-locate@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - dependencies: - p-limit "^2.0.0" - p-map@^1.1.1: version "1.2.0" resolved "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -2724,10 +2853,6 @@ p-try@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" -p-try@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/p-try/download/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - parse-glob@^3.0.4: version "3.0.4" resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -2820,12 +2945,6 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - dependencies: - find-up "^3.0.0" - please-upgrade-node@^3.0.2: version "3.1.1" resolved "http://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" @@ -2852,6 +2971,13 @@ prettier@^1.13.7: version "1.13.7" resolved "http://registry.npm.taobao.org/prettier/download/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" +pretty-format@^22.4.0, pretty-format@^22.4.3: + version "22.4.3" + resolved "http://registry.npm.taobao.org/pretty-format/download/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + pretty-format@^23.2.0: version "23.2.0" resolved "http://registry.npm.taobao.org/pretty-format/download/pretty-format-23.2.0.tgz#3b0aaa63c018a53583373c1cb3a5d96cc5e83017" @@ -3256,7 +3382,7 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.6: +source-map-support@^0.5.0, source-map-support@^0.5.5, source-map-support@^0.5.6: version "0.5.6" resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" dependencies: @@ -3530,18 +3656,21 @@ trim-right@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -ts-jest@^23.0.1: - version "23.0.1" - resolved "http://registry.npm.taobao.org/ts-jest/download/ts-jest-23.0.1.tgz#c90e747b2787d3394319cde77c2748a87aaf2f48" +ts-jest@22.4.6: + version "22.4.6" + resolved "http://registry.npm.taobao.org/ts-jest/download/ts-jest-22.4.6.tgz#a5d7f5e8b809626d1f4143209d301287472ec344" dependencies: + babel-core "^6.26.3" babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.0.0" + babel-plugin-transform-es2015-modules-commonjs "^6.26.2" + babel-preset-jest "^22.4.3" cpx "^1.5.0" - fs-extra "6.0.1" - jest-config "^23.0.0" + fs-extra "6.0.0" + jest-config "^22.4.3" lodash "^4.17.10" - pkg-dir "^3.0.0" - yargs "^12.0.1" + pkg-dir "^2.0.0" + source-map-support "^0.5.5" + yargs "^11.0.0" ts-node@^7.0.0: version "7.0.0" @@ -3776,18 +3905,10 @@ xml-name-validator@^3.0.0: version "3.0.0" resolved "http://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" -xregexp@4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/xregexp/download/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" - y18n@^3.2.1: version "3.2.1" resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -"y18n@^3.2.1 || ^4.0.0": - version "4.0.0" - resolved "http://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - yallist@^2.1.2: version "2.1.2" resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -3796,12 +3917,6 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" -yargs-parser@^10.1.0: - version "10.1.0" - resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - dependencies: - camelcase "^4.1.0" - yargs-parser@^9.0.2: version "9.0.2" resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" @@ -3825,23 +3940,6 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^12.0.1: - version "12.0.1" - resolved "http://registry.npm.taobao.org/yargs/download/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2" - dependencies: - cliui "^4.0.0" - decamelize "^2.0.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^10.1.0" - yargs@~3.10.0: version "3.10.0" resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From 3448953e0b0177ccd74ded110a7618fb7646d24b Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 16:09:51 +0800 Subject: [PATCH 100/497] Disble tslint's ts2564 error. --- test/enforcer.test.ts | 4 ++-- tsconfig.json | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index a2ee8307..4db3b7de 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -28,7 +28,7 @@ test('testKeyMatchModelInMemory', () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - let e = Enforcer.newEnforcer(m, a); + let e = new Enforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -52,7 +52,7 @@ test('testKeyMatchModelInMemory', () => { testEnforce(e, 'cathy', '/cathy_data', 'POST', true); testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); - e = Enforcer.newEnforcer(m); + e = new Enforcer(m); a.loadPolicy(e.getModel()); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); diff --git a/tsconfig.json b/tsconfig.json index 11701bef..e0ce1d7c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,8 @@ "moduleResolution": "node", "declaration": true, "strict": true, - "outDir": "lib/es6" + "outDir": "lib/es6", + "strictPropertyInitialization": false }, "include": ["src/**/*.ts"] } From 73c2a7c06a1ec0062111bac1f3cd8bcb21ebbef6 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 16:15:23 +0800 Subject: [PATCH 101/497] Improve the comments of enforcer.ts. --- src/enforcer.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 64695079..561b3e4e 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -50,10 +50,10 @@ export class Enforcer { // constructor is the constructor for Enforcer. // It creates an enforcer via file or DB. // File: - // e := NewEnforcer("path/to/basic_model.conf", "path/to/basic_policy.csv") + // const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); // MySQL DB: - // a := mysqladapter.NewDBAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/") - // e := casbin.NewEnforcer("path/to/basic_model.conf", a) + // const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); + // const e = new Enforcer('path/to/basic_model.conf', a); constructor(...params: any[]) { this.rm = new DefaultRoleManager(10); this.eft = new DefaultEffector(); From 591424b895d1db0f11f10eecdb4eb8249fe922df Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 17:36:27 +0800 Subject: [PATCH 102/497] Improve the format of defaultEffector.ts. --- src/effect/defaultEffector.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/effect/defaultEffector.ts b/src/effect/defaultEffector.ts index 58c4d8e5..08f58638 100644 --- a/src/effect/defaultEffector.ts +++ b/src/effect/defaultEffector.ts @@ -18,11 +18,6 @@ import { Effect, Effector } from './effector'; * DefaultEffector is default effector for Casbin. */ export class DefaultEffector implements Effector { - /** - * DefaultEffector is the constructor for DefaultEffector. - */ - constructor() {} - /** * mergeEffects merges all matching results collected by the enforcer into a single decision. * @param {string} expr @@ -30,11 +25,7 @@ export class DefaultEffector implements Effector { * @param {number[]} results * @returns {boolean} */ - public mergeEffects( - expr: string, - effects: Effect[], - results: number[] - ): boolean { + public mergeEffects(expr: string, effects: Effect[], results: number[]): boolean { let result = false; if (expr === 'some(where (p_eft == allow))') { From 0787e5e8f5acb1e5fce9d2491e52c6ace5ffa6ad Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 17:57:04 +0800 Subject: [PATCH 103/497] Fix policy-not-loaded bug in file adapter. --- src/persist/helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/persist/helper.ts b/src/persist/helper.ts index ac60bc13..a47abc29 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -2,7 +2,7 @@ import { Model } from '../model'; export class Helper { public static loadPolicyLine(line: string, model: Model) { - if (line) { + if (line === '') { return; } From cad5805449a2278ed54fd3eeb43e4a04709de392 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 17:59:35 +0800 Subject: [PATCH 104/497] Improve the comment of effector.ts. --- src/effect/effector.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/effect/effector.ts b/src/effect/effector.ts index e8dc2ad9..05fa2fd2 100644 --- a/src/effect/effector.ts +++ b/src/effect/effector.ts @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Effect is the result for a policy rule. // Values for policy effect. export enum Effect { Allow = 1, From c4c6ff140d0f896e5a4408ed409c4a82c74cc9c8 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 18:02:14 +0800 Subject: [PATCH 105/497] Rewrite the enforce() function to keep consistent with Casbin. --- src/enforcer.ts | 158 ++++++++++++++++++++---------------------------- 1 file changed, 66 insertions(+), 92 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 561b3e4e..f8091f68 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -302,75 +302,62 @@ export class Enforcer { }); } - // console.log('this.model.model: ', this.model.model); - const astItem = [...(this.model.model.get('m') || [])].find( - ([key]) => key === 'm' - ); - if (!astItem) { - throw new Error('Ast is undefined'); + // @ts-ignore + const expString = this.model.model.get('m').get('m').value; + if (!expString) { + throw new Error('model is undefined'); } - const [, ast] = astItem; - const functionsForJs: { [key: string]: any } = {}; - functions.forEach((value, key) => { - functionsForJs[key] = value; - }); - - const expression = Valuate.parse(ast.value); - - let result: boolean = false; + const expression = Valuate.parse(expString); - let policyEffects: number[]; + let policyEffects: Effect[]; let matcherResults: number[]; - const pRootValue = this.model.model.get('p'); - const { policy }: any = pRootValue && pRootValue.get('p'); - - if (policy.length > 0) { - policyEffects = new Array(policy.length); - matcherResults = new Array(policy.length); - - for (let i = 0; i < policy.length; i++) { - const pvals = policy[i]; - logPrint('Policy Rule: ', pvals); - - const rRootValue = this.model.model.get('r'); - const rValue = rRootValue && rRootValue.get('r'); - let tokens = rValue && rValue.tokens; - if (!tokens) { - throw new Error('tokens is undefined'); - } - tokens.forEach((n, index) => { - functionsForJs[n] = rvals[index]; + // @ts-ignore + const policyLen = this.model.model.get('p').get('p').policy.length; + if (policyLen !== 0) { + policyEffects = new Array(policyLen); + matcherResults = new Array(policyLen); + + for (let i = 0; i < policyLen; i++) { + // @ts-ignore + const pvals = this.model.model.get('p').get('p').policy[i]; + + // logPrint('Policy Rule: ', pvals); + + const parameters = new Map(); + // @ts-ignore + this.model.model.get('r').get('r').tokens.forEach((token, j) => { + parameters.set(token, rvals[j]); }); - - const pValue = pRootValue && pRootValue.get('p'); - tokens = pValue && pValue.tokens; - if (!tokens) { - throw new Error('tokens is undefined'); - } - tokens.forEach((n, index) => { - functionsForJs[n] = rvals[index]; + // @ts-ignore + this.model.model.get('p').get('p').tokens.forEach((token, j) => { + parameters.set(token, pvals[j]); }); - result = new Valuate().evaluate(expression, functionsForJs); - logPrint(`Result: ${result}`); + const result = new Valuate().evaluate(expression, parameters); + // logPrint(`Result: ${result}`); - if (typeof result === 'boolean') { - if (!result) { - policyEffects[i] = Effect.Indeterminate; - } - } else if (typeof result === 'number') { - if (result === 0) { - policyEffects[i] = Effect.Indeterminate; - } else { - matcherResults[i] = result; - } - } else { - throw new Error('matcher result should be bool, int or float'); + switch (typeof result) { + case 'boolean': + if (!result) { + policyEffects[i] = Effect.Indeterminate; + continue; + } + break; + case 'number': + if (result === 0) { + policyEffects[i] = Effect.Indeterminate; + continue; + } else { + matcherResults[i] = result; + } + break; + default: + throw new Error('matcher result should be boolean or number'); } - if (_.has(functionsForJs, 'p_eft')) { - const eft = _.get(functionsForJs, 'p_eft'); + if (_.has(parameters, 'p_eft')) { + const eft = _.get(parameters, 'p_eft'); if (eft === 'allow') { policyEffects[i] = Effect.Allow; } else if (eft === 'deny') { @@ -381,38 +368,28 @@ export class Enforcer { } else { policyEffects[i] = Effect.Allow; } - const eRootMap = this.model.model.get('e'); - const eValue = eRootMap && eRootMap.get('e'); - if (eValue) { - if (_.indexOf(['priority(p_eft)', 'deny'], eValue.value) > -1) { - break; - } + + // @ts-ignore + if (this.model.model.get('e').get('e').value === 'priority(p_eft) || deny') { + break; } } } else { policyEffects = new Array(1); matcherResults = new Array(1); - const rRootValue = this.model.model.get('r'); - const rValue = rRootValue && rRootValue.get('r'); - let tokens = rValue && rValue.tokens; - if (!tokens) { - throw new Error('tokens is undefined'); - } - tokens.forEach((n, i) => { - functionsForJs[n] = rvals[i]; + const parameters = new Map(); + // @ts-ignore + this.model.model.get('r').get('r').tokens.forEach((token, j) => { + parameters.set(token, rvals[j]); }); - - const pValue = pRootValue && pRootValue.get('p'); - tokens = pValue && pValue.tokens; - if (!tokens) { - throw new Error('tokens is undefined'); - } - tokens.forEach((n, i) => { - functionsForJs[n] = rvals[i]; + // @ts-ignore + this.model.model.get('p').get('p').tokens.forEach((token) => { + parameters.set(token, ''); }); - result = new Valuate().evaluate(expression, functionsForJs); - logPrint(`Result: ${result}`); + + const result = new Valuate().evaluate(expression, parameters); + // logPrint(`Result: ${result}`); if (result) { policyEffects[0] = Effect.Allow; @@ -421,29 +398,26 @@ export class Enforcer { } } - logPrint(`Rule Results: ${policyEffects}`); + // logPrint(`Rule Results: ${policyEffects}`); - const eRootMapValue = this.model.model.get('e'); - const eMap = eRootMapValue && eRootMapValue.get('e'); - if (eMap) { - result = this.eft.mergeEffects(eMap.value, policyEffects, matcherResults); - } + // @ts-ignore + const res = this.eft.mergeEffects(this.model.model.get('e').get('e').value, policyEffects, matcherResults); // only generate the request --> result string if the message // is going to be logged. if (getEnableLog()) { let reqStr = 'Request: '; for (let i = 0; i < rvals.length; i++) { - if (i + 1 !== rvals.length) { + if (i !== rvals.length - 1) { reqStr += `${rvals[i]}, `; } else { reqStr += rvals[i]; } } - reqStr += ` ---> ${result}`; + reqStr += ` ---> ${res}`; logPrint(reqStr); } - return result; + return res; } } From 3488345554a9ae0661d52ac900ecfd6ebb9aa660 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 18:02:56 +0800 Subject: [PATCH 106/497] Fix policy-not-loaded bug in initWithModelAndAdapter(). --- src/enforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index f8091f68..399be148 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -119,7 +119,7 @@ export class Enforcer { this.initialize(); - if (!this.adapter) { + if (this.adapter) { // error intentionally ignored this.loadPolicy(); } From 56ab07bc21f2feaf6adb267fe1aed278d29af1be Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 18:06:11 +0800 Subject: [PATCH 107/497] Remove export valuate --- src/util/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/util/index.ts b/src/util/index.ts index 8d09bbdb..7eebf6c9 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -15,4 +15,3 @@ export * from './operators'; export * from './log'; export * from './util'; -export * from './valuate'; From 149441ae5b3b40c347bc3d12bea011da24e1ef7d Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 18:06:45 +0800 Subject: [PATCH 108/497] Remove Valuate --- src/enforcer.ts | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 64695079..21359c69 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,25 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { - generateGFunction, - getEnableLog, - logPrint, - setEnableLog, - Valuate -} from './util'; +import { generateGFunction, getEnableLog, logPrint, setEnableLog } from './util'; import { FunctionMap, Model } from './model'; import { DefaultEffector, Effect, Effector } from './effect'; +import { compile } from 'expression-eval'; import * as _ from 'lodash'; -import { - Adapter, - DefaultFilteredAdapter, - FileAdapter, - Filter, - FilteredAdapter, - Watcher -} from './persist'; +import { Adapter, FileAdapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; // Enforcer is the main interface for authorization enforcement and policy management. @@ -316,7 +304,7 @@ export class Enforcer { functionsForJs[key] = value; }); - const expression = Valuate.parse(ast.value); + const expression = compile(ast.value); let result: boolean = false; @@ -352,7 +340,7 @@ export class Enforcer { functionsForJs[n] = rvals[index]; }); - result = new Valuate().evaluate(expression, functionsForJs); + result = expression(functionsForJs); logPrint(`Result: ${result}`); if (typeof result === 'boolean') { @@ -411,7 +399,7 @@ export class Enforcer { tokens.forEach((n, i) => { functionsForJs[n] = rvals[i]; }); - result = new Valuate().evaluate(expression, functionsForJs); + result = expression(functionsForJs); logPrint(`Result: ${result}`); if (result) { From dc1306baa329ba50b015d154c60fe4b32825a9b3 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 18:07:23 +0800 Subject: [PATCH 109/497] Add expression-eval dependency --- package.json | 1 + yarn.lock | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 288af6f6..1791836b 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "typescript": "^2.9.2" }, "dependencies": { + "expression-eval": "^1.3.0", "fs-extra": "^7.0.0", "ip": "^1.1.5", "jsep": "^0.3.4", diff --git a/yarn.lock b/yarn.lock index 5d665533..edf3fc69 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1020,6 +1020,12 @@ expect@^23.4.0: jest-message-util "^23.4.0" jest-regex-util "^23.3.0" +expression-eval@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/expression-eval/download/expression-eval-1.3.0.tgz#995fd072d66087d543ae6c7f1f622393c8a74794" + dependencies: + jsep "^0.3.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -2219,7 +2225,7 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" -jsep@^0.3.4: +jsep@^0.3.0, jsep@^0.3.4: version "0.3.4" resolved "http://registry.npm.taobao.org/jsep/download/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" From 62e44e609dd3f440e34dedcc21c5a4cd7ac386da Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 18:56:28 +0800 Subject: [PATCH 110/497] Use constructor (new Enforcer()) instead of Enforcer.newEnforcer() --- test/enforcer.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index a2ee8307..4db3b7de 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -28,7 +28,7 @@ test('testKeyMatchModelInMemory', () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - let e = Enforcer.newEnforcer(m, a); + let e = new Enforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -52,7 +52,7 @@ test('testKeyMatchModelInMemory', () => { testEnforce(e, 'cathy', '/cathy_data', 'POST', true); testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); - e = Enforcer.newEnforcer(m); + e = new Enforcer(m); a.loadPolicy(e.getModel()); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); From 02d220870bc720b96f4a537c3992faecbf76c068 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 18:57:30 +0800 Subject: [PATCH 111/497] Use expression-eval --- test/util.test.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/util.test.ts b/test/util.test.ts index 7f80271d..1aa33ec2 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -13,7 +13,7 @@ // limitations under the License. import * as util from '../src/util'; -import { Valuate } from '../src/util'; +import { compile } from 'expression-eval'; test('test enableLog success', () => { util.setEnableLog(true); @@ -40,10 +40,8 @@ test('test logPrintf', () => { }); test('test Valuate', () => { - let ast = Valuate.parse('1 + 1 === 2'); - expect(new Valuate().evaluate(ast)).toEqual(true); - ast = Valuate.parse('1 + 1 !== 2'); - expect(new Valuate().evaluate(ast)).toEqual(false); + expect(compile('1 + 1 === 2')()).toEqual(true); + expect(compile('1 + 1 !== 2')()).toEqual(false); }); test('test regexMatchFunc', () => { From 651faf90315fd6a3034ac611eae7c35487e0d366 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 20:36:58 +0800 Subject: [PATCH 112/497] Fix the wrong string type in initWithFile()'s first parameter. --- src/enforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index f92e1a11..4ea82e45 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -71,7 +71,7 @@ export class Enforcer { } } else if (params.length - parsedParamLen === 1) { if (typeof params[0] === 'string') { - this.initWithFile(params[0].toString, ''); + this.initWithFile(params[0], ''); } else { this.initWithModelAndAdapter(params[0], new FileAdapter('')); } From d4ad5de928ef12a212c32c3d25d28773fd30f9d1 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 20:41:13 +0800 Subject: [PATCH 113/497] Do not throw error when policy path is empty in file adapter. --- src/persist/fileAdapter.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 18b3f2a5..8e6b8aa1 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -21,7 +21,8 @@ export class FileAdapter implements Adapter { public loadPolicy(model: Model): void { if (!this.filePath) { - throw new Error('invalid file path, file path cannot be empty'); + // throw new Error('invalid file path, file path cannot be empty'); + return; } this.loadPolicyFile(model, Helper.loadPolicyLine); } @@ -51,7 +52,8 @@ export class FileAdapter implements Adapter { */ public savePolicy(model: Model): void { if (!this.filePath) { - throw new Error('invalid file path, file path cannot be empty'); + // throw new Error('invalid file path, file path cannot be empty'); + return; } let result = ''; From e958aab70be99f3f293724e600a1495a785773ef Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 20:42:15 +0800 Subject: [PATCH 114/497] Remove the throw error when filePath is empty --- src/persist/fileAdapter.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 18b3f2a5..f500d21a 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -21,7 +21,8 @@ export class FileAdapter implements Adapter { public loadPolicy(model: Model): void { if (!this.filePath) { - throw new Error('invalid file path, file path cannot be empty'); + return; + // throw new Error('invalid file path, file path cannot be empty'); } this.loadPolicyFile(model, Helper.loadPolicyLine); } From 91c6a0b7cb37b3adfe2ca5ec3f2f066be08fbc7a Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 20:51:55 +0800 Subject: [PATCH 115/497] Add tests like "TestRBACModel" in model test. --- test/model.test.ts | 73 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/test/model.test.ts b/test/model.test.ts index 98fd5c5e..7ba2bf23 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -18,7 +18,11 @@ function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: bo expect(e.enforce(sub, obj, act)).toBe(res); } -test('testBasicModel', () => { +function testEnforceWithoutUsers(e: Enforcer, obj: string, act: string, res: boolean): void { + expect(e.enforce(obj, act)).toBe(res); +} + +test('TestBasicModel', () => { const e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); @@ -31,7 +35,7 @@ test('testBasicModel', () => { testEnforce(e, 'bob', 'data2', 'write', true); }); -test('testBasicModelNoPolicy', () => { +test('TestBasicModelNoPolicy', () => { const e = new Enforcer('examples/basic_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); @@ -43,3 +47,68 @@ test('testBasicModelNoPolicy', () => { testEnforce(e, 'bob', 'data2', 'read', false); testEnforce(e, 'bob', 'data2', 'write', false); }); + +test('TestBasicModelWithRoot', () => { + const e = new Enforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); + testEnforce(e, 'root', 'data1', 'read', true); + testEnforce(e, 'root', 'data1', 'write', true); + testEnforce(e, 'root', 'data2', 'read', true); + testEnforce(e, 'root', 'data2', 'write', true); +}); + +test('TestBasicModelWithRootNoPolicy', () => { + const e = new Enforcer('examples/basic_with_root_model.conf'); + + testEnforce(e, 'alice', 'data1', 'read', false); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', false); + testEnforce(e, 'root', 'data1', 'read', true); + testEnforce(e, 'root', 'data1', 'write', true); + testEnforce(e, 'root', 'data2', 'read', true); + testEnforce(e, 'root', 'data2', 'write', true); +}); + +test('TestBasicModelWithoutUsers', () => { + const e = new Enforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); + + testEnforceWithoutUsers(e, 'data1', 'read', true); + testEnforceWithoutUsers(e, 'data1', 'write', false); + testEnforceWithoutUsers(e, 'data2', 'read', false); + testEnforceWithoutUsers(e, 'data2', 'write', true); +}); + +test('TestBasicModelWithoutResources', () => { + const e = new Enforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); + + testEnforceWithoutUsers(e, 'alice', 'read', true); + testEnforceWithoutUsers(e, 'alice', 'write', false); + testEnforceWithoutUsers(e, 'bob', 'read', false); + testEnforceWithoutUsers(e, 'bob', 'write', true); +}); + +test('TestRBACModel', () => { + const e = new Enforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); From e28d28c83a00c27beb5daf6a5dbee036e84a0d6a Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 20:53:57 +0800 Subject: [PATCH 116/497] Fix call initWithFile method parameter error --- src/enforcer.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index f92e1a11..5c9edc03 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -71,9 +71,9 @@ export class Enforcer { } } else if (params.length - parsedParamLen === 1) { if (typeof params[0] === 'string') { - this.initWithFile(params[0].toString, ''); + this.initWithFile(params[0], ''); } else { - this.initWithModelAndAdapter(params[0], new FileAdapter('')); + this.initWithModelAndAdapter(params[0], null); } } else if (params.length === parsedParamLen) { this.initWithFile('', ''); @@ -97,8 +97,10 @@ export class Enforcer { } // initWithModelAndAdapter initializes an enforcer with a model and a database adapter. - public initWithModelAndAdapter(m: Model, adapter: Adapter): void { - this.adapter = adapter; + public initWithModelAndAdapter(m: Model, adapter: Adapter | null): void { + if (adapter) { + this.adapter = adapter; + } this.watcher = null; this.model = m; From d4f75d6c0f3f71fff4ad8fea5f55f6a04798c950 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 21:17:11 +0800 Subject: [PATCH 117/497] Use null instead of empty file adapter instance. --- src/enforcer.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 4ea82e45..5c9edc03 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -73,7 +73,7 @@ export class Enforcer { if (typeof params[0] === 'string') { this.initWithFile(params[0], ''); } else { - this.initWithModelAndAdapter(params[0], new FileAdapter('')); + this.initWithModelAndAdapter(params[0], null); } } else if (params.length === parsedParamLen) { this.initWithFile('', ''); @@ -97,8 +97,10 @@ export class Enforcer { } // initWithModelAndAdapter initializes an enforcer with a model and a database adapter. - public initWithModelAndAdapter(m: Model, adapter: Adapter): void { - this.adapter = adapter; + public initWithModelAndAdapter(m: Model, adapter: Adapter | null): void { + if (adapter) { + this.adapter = adapter; + } this.watcher = null; this.model = m; From 10fdabcb04a8ed472338f43897a81ec17d15f1fd Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 21:25:17 +0800 Subject: [PATCH 118/497] Set "max-line-length" to false in tslint. --- tslint.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tslint.json b/tslint.json index bd05685b..5b45cc3c 100644 --- a/tslint.json +++ b/tslint.json @@ -14,7 +14,8 @@ "object-literal-sort-keys": false, "no-empty": false, "quotemark": [true, "single"], - "trailing-comma": false + "trailing-comma": false, + "max-line-length": false }, "rulesDirectory": [] } \ No newline at end of file From cd4c4147e76689f72d64c8f66eb48546b54ac623 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 21:45:25 +0800 Subject: [PATCH 119/497] Add RBAC, ABAC and KeyMatch tests. --- test/model.test.ts | 93 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/test/model.test.ts b/test/model.test.ts index 7ba2bf23..62076580 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -14,7 +14,7 @@ import { Enforcer } from '../src/enforcer'; -function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { +function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); } @@ -22,6 +22,10 @@ function testEnforceWithoutUsers(e: Enforcer, obj: string, act: string, res: boo expect(e.enforce(obj, act)).toBe(res); } +function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, act: string, res: boolean): void { + expect(e.enforce(sub, dom, obj, act)).toBe(res); +} + test('TestBasicModel', () => { const e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); @@ -112,3 +116,90 @@ test('TestRBACModel', () => { testEnforce(e, 'bob', 'data2', 'read', false); testEnforce(e, 'bob', 'data2', 'write', true); }); + +test('TestRBACModelWithResourceRoles', () => { + const e = new Enforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', true); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestRBACModelWithDomains', () => { + const e = new Enforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + + testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); + testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); + testDomainEnforce(e, 'alice', 'domain1', 'data2', 'read', false); + testDomainEnforce(e, 'alice', 'domain1', 'data2', 'write', false); + testDomainEnforce(e, 'bob', 'domain2', 'data1', 'read', false); + testDomainEnforce(e, 'bob', 'domain2', 'data1', 'write', false); + testDomainEnforce(e, 'bob', 'domain2', 'data2', 'read', true); + testDomainEnforce(e, 'bob', 'domain2', 'data2', 'write', true); +}); + +class TestResource { + public Name: string; + public Owner: string; + + constructor(name: string, owner: string) { + this.Name = name; + this.Owner = owner; + } +} + +test('TestABACModel', () => { + const e = new Enforcer('examples/abac_model.conf'); + + const data1 = new TestResource('data1', 'alice'); + const data2 = new TestResource('data2', 'bob'); + + testEnforce(e, 'alice', data1, 'read', true); + testEnforce(e, 'alice', data1, 'write', true); + testEnforce(e, 'alice', data2, 'read', false); + testEnforce(e, 'alice', data2, 'write', false); + testEnforce(e, 'bob', data1, 'read', false); + testEnforce(e, 'bob', data1, 'write', false); + testEnforce(e, 'bob', data2, 'read', true); + testEnforce(e, 'bob', data2, 'write', true); +}); + +test('TestKeyMatchModel', () => { + const e = new Enforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); + + testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); + testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); + testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); + testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); + testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); + testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); + testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); + + testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); + testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); + testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); + testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); + testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); + testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); + testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); + testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); + + testEnforce(e, 'cathy', '/cathy_data', 'GET', true); + testEnforce(e, 'cathy', '/cathy_data', 'POST', true); + testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); +}); + +test('TestKeyMatch2Model', () => { + const e = new Enforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); + + testEnforce(e, 'alice', '/alice_data', 'GET', false); + testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); + testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); +}); From 971a78b9e949d684cf2bbd936221028cb9ade69d Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 4 Aug 2018 22:19:02 +0800 Subject: [PATCH 120/497] Remove valuate --- src/util/valuate.ts | 170 -------------------------------------------- 1 file changed, 170 deletions(-) delete mode 100644 src/util/valuate.ts diff --git a/src/util/valuate.ts b/src/util/valuate.ts deleted file mode 100644 index 819fc906..00000000 --- a/src/util/valuate.ts +++ /dev/null @@ -1,170 +0,0 @@ -/** - * JavaScript expression parsing and evaluation, safely. - * code from https://github.com/donmccurdy/expression-eval - * Powered by jsep. - */ -import * as jsep from 'jsep'; - -export class Valuate { - /* tslint:disable */ - public binops: any = { - '||'(a: any, b: any) { - return a || b; - }, - '&&'(a: any, b: any) { - return a && b; - }, - '|'(a: any, b: any) { - return a | b; - }, - '^'(a: any, b: any) { - return a ^ b; - }, - '&'(a: any, b: any) { - return a & b; - }, - '=='(a: any, b: any) { - return a == b; - }, - '!='(a: any, b: any) { - return a != b; - }, - '==='(a: any, b: any) { - return a === b; - }, - '!=='(a: any, b: any) { - return a !== b; - }, - '<'(a: any, b: any) { - return a < b; - }, - '>'(a: any, b: any) { - return a > b; - }, - '<='(a: any, b: any) { - return a <= b; - }, - '>='(a: any, b: any) { - return a >= b; - }, - '<<'(a: any, b: any) { - return a << b; - }, - '>>'(a: any, b: any) { - return a >> b; - }, - '>>>'(a: any, b: any) { - return a >>> b; - }, - '+'(a: any, b: any) { - return a + b; - }, - '-'(a: any, b: any) { - return a - b; - }, - '*'(a: any, b: any) { - return a * b; - }, - '/'(a: any, b: any) { - return a / b; - }, - '%'(a: any, b: any) { - return a % b; - } - }; - - public unops: any = { - '-'(a: any) { - return -a; - }, - '+'(a: any) { - return a; - }, - '~'(a: any) { - return ~a; - }, - '!'(a: any) { - return !a; - } - }; - - public evaluateArray(list: any, context: object) { - return list.map((v: any) => this.evaluate(v, context)); - } - - public evaluateMember(node: any, context: object) { - const object: any = this.evaluate(node.object, context); - if (node.computed) { - return [object, object[this.evaluate(node.property, context)]]; - } else { - return [object, object[node.property.name]]; - } - } - - public evaluate(node: any, context?: any): any { - if (!context) { - context = {}; - } - switch (node.type) { - case 'ArrayExpression': - return this.evaluateArray(node.elements, context); - - case 'BinaryExpression': - return this.binops[node.operator]( - this.evaluate(node.left, context), - this.evaluate(node.right, context) - ); - - case 'CallExpression': - let caller, fn, assign; - if (node.callee.type === 'MemberExpression') { - assign = this.evaluateMember(node.callee, context); - caller = assign[0]; - fn = assign[1]; - } else { - fn = this.evaluate(node.callee, context); - } - if (typeof fn !== 'function') { - return undefined; - } - return fn.apply(caller, this.evaluateArray(node.arguments, context)); - - case 'ConditionalExpression': - return this.evaluate(node.test, context) - ? this.evaluate(node.consequent, context) - : this.evaluate(node.alternate, context); - - case 'Identifier': - return context[node.name]; - - case 'Literal': - return node.value; - - case 'LogicalExpression': - return this.binops[node.operator]( - this.evaluate(node.left, context), - this.evaluate(node.right, context) - ); - - case 'MemberExpression': - return this.evaluateMember(node, context)[1]; - - case 'ThisExpression': - return context; - - case 'UnaryExpression': - return this.unops[node.operator](this.evaluate(node.argument, context)); - - default: - return undefined; - } - } - - public compile(expression: any) { - return this.evaluate.bind(null, jsep(expression)); - } - - public static parse(val: string | jsep.Expression): jsep.Expression { - return jsep(val); - } -} From 858e2b2727658756bf9c6dde501c311d9cbde256 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 22:20:31 +0800 Subject: [PATCH 121/497] Rename operators.ts to builtinOperators.ts --- src/util/{operators.ts => builtinOperators.ts} | 0 src/util/index.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/util/{operators.ts => builtinOperators.ts} (100%) diff --git a/src/util/operators.ts b/src/util/builtinOperators.ts similarity index 100% rename from src/util/operators.ts rename to src/util/builtinOperators.ts diff --git a/src/util/index.ts b/src/util/index.ts index 7eebf6c9..8267cb97 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -12,6 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -export * from './operators'; +export * from './builtinOperators'; export * from './log'; export * from './util'; From ab267fb7f84bac27763096637908ac26f866aaae Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 22:26:57 +0800 Subject: [PATCH 122/497] Do not throw error when policy path is empty in file adapter (AGAIN). --- src/persist/fileAdapter.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index f500d21a..8e6b8aa1 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -21,8 +21,8 @@ export class FileAdapter implements Adapter { public loadPolicy(model: Model): void { if (!this.filePath) { - return; // throw new Error('invalid file path, file path cannot be empty'); + return; } this.loadPolicyFile(model, Helper.loadPolicyLine); } @@ -52,7 +52,8 @@ export class FileAdapter implements Adapter { */ public savePolicy(model: Model): void { if (!this.filePath) { - throw new Error('invalid file path, file path cannot be empty'); + // throw new Error('invalid file path, file path cannot be empty'); + return; } let result = ''; From f2a3111b0377b5d621008cd03917513bd24a0615 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 22:32:42 +0800 Subject: [PATCH 123/497] Fix an error in regexMatchFunc(). --- src/util/builtinOperators.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 4aae476a..a774c1f0 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -94,12 +94,12 @@ const regexMatch: (key1: string, key2: string) => boolean = (key1: string, key2: return new RegExp(key2).test(key1); }; -// regexMatchFunc is the wrapper for RegexMatch. +// regexMatchFunc is the wrapper for regexMatch. const regexMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); - return keyMatch3(name1, name2); + return regexMatch(name1, name2); }; // IPMatch determines whether IP address ip1 matches the pattern of IP address ip2, From 290de504a991c9243e52066008f663d4d5ee58e7 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 4 Aug 2018 22:34:11 +0800 Subject: [PATCH 124/497] Rename IPMatch to ipMatch. --- src/model/functionMap.ts | 2 +- src/util/builtinOperators.ts | 16 ++++++++-------- test/util.test.ts | 18 +++++++++--------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index ddd77050..d247dc6e 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -32,7 +32,7 @@ export class FunctionMap { fm.addFunction('keyMatch', util.keyMatchFunc); fm.addFunction('keyMatch2', util.keyMatch2Func); fm.addFunction('regexMatch', util.regexMatchFunc); - fm.addFunction('ipMatch', util.IPMatchFunc); + fm.addFunction('ipMatch', util.ipMatchFunc); return fm.getFunctions(); } diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index a774c1f0..9e0e0a00 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -102,14 +102,14 @@ const regexMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { return regexMatch(name1, name2); }; -// IPMatch determines whether IP address ip1 matches the pattern of IP address ip2, +// ipMatch determines whether IP address ip1 matches the pattern of IP address ip2, // ip2 can be an IP address or a CIDR pattern. // For example, '192.168.2.123' matches '192.168.2.0/24' -const IPMatch: (ip1: string, ip2: string) => boolean = (ip1: string, ip2: string) => { +const ipMatch: (ip1: string, ip2: string) => boolean = (ip1: string, ip2: string) => { // check ip1 if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { throw new Error( - 'invalid argument: ip1 in IPMatch() function is not an IP address.' + 'invalid argument: ip1 in ipMatch() function is not an IP address.' ); } // check ip2 @@ -120,19 +120,19 @@ const IPMatch: (ip1: string, ip2: string) => boolean = (ip1: string, ip2: string if (!(ip.isV4Format(ip2) || ip.isV6Format(ip2))) { console.log(ip2); throw new Error( - 'invalid argument: ip2 in IPMatch() function is not an IP address.' + 'invalid argument: ip2 in ipMatch() function is not an IP address.' ); } return ip.isEqual(ip1, ip2); } }; -// IPMatchFunc is the wrapper for IPMatch. -const IPMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { +// ipMatchFunc is the wrapper for ipMatch. +const ipMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { const ip1: string = _.toString(args[0]); const ip2: string = _.toString(args[1]); - return IPMatch(ip1, ip2); + return ipMatch(ip1, ip2); }; // generateGFunction is the factory method of the g(_, _) function. @@ -158,6 +158,6 @@ export { keyMatch2Func, keyMatch3Func, regexMatchFunc, - IPMatchFunc, + ipMatchFunc, generateGFunction }; diff --git a/test/util.test.ts b/test/util.test.ts index 1aa33ec2..cbb6356a 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -68,13 +68,13 @@ test('test keyMatch3Func', () => { expect(util.keyMatch3Func('/baz', '/foo')).toEqual(false); }); -test('test IPMatchFunc', () => { - expect(util.IPMatchFunc('::1', '::0:1')).toEqual(true); - expect(util.IPMatchFunc('192.168.1.1', '192.168.1.1')).toEqual(true); - expect(util.IPMatchFunc('127.0.0.1', '::ffff:127.0.0.1')).toEqual(true); - expect(util.IPMatchFunc('192.168.2.123', '192.168.2.0/24')).toEqual(true); - expect(util.IPMatchFunc('::1', '127.0.0.2')).toEqual(false); - expect(() => util.IPMatchFunc('i am chaplin', '127.0.0.1')).toThrow(Error); - expect(() => util.IPMatchFunc('127.0.0.1', 'i am chaplin')).toThrow(/invalid/g); - expect(util.IPMatchFunc('192.168.2.189', '192.168.1.134/26')).toEqual(false); +test('test ipMatchFunc', () => { + expect(util.ipMatchFunc('::1', '::0:1')).toEqual(true); + expect(util.ipMatchFunc('192.168.1.1', '192.168.1.1')).toEqual(true); + expect(util.ipMatchFunc('127.0.0.1', '::ffff:127.0.0.1')).toEqual(true); + expect(util.ipMatchFunc('192.168.2.123', '192.168.2.0/24')).toEqual(true); + expect(util.ipMatchFunc('::1', '127.0.0.2')).toEqual(false); + expect(() => util.ipMatchFunc('i am chaplin', '127.0.0.1')).toThrow(Error); + expect(() => util.ipMatchFunc('127.0.0.1', 'i am chaplin')).toThrow(/invalid/g); + expect(util.ipMatchFunc('192.168.2.189', '192.168.1.134/26')).toEqual(false); }); From 63a9a2d53256372ab0129ec47c4c4f29ebdf3d18 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 00:02:08 +0800 Subject: [PATCH 125/497] Modify arrow functions to normal functions in builtinOperators.ts --- src/util/builtinOperators.ts | 40 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 9e0e0a00..47a89b20 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -19,7 +19,7 @@ import * as _ from 'lodash'; // keyMatch determines whether key1 matches the pattern of key2 (similar to RESTful path), // key2 can contain a *. // For example, '/foo/bar' matches '/foo/*' -const keyMatch: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { +function keyMatch(key1: string, key2: string): boolean { const pos: number = key2.indexOf('*'); if (pos === -1) { return key1 === key2; @@ -30,20 +30,20 @@ const keyMatch: (key1: string, key2: string) => boolean = (key1: string, key2: s } return key1 === key2.slice(0, pos); -}; +} // keyMatchFunc is the wrapper for keyMatch. -const keyMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { +function keyMatchFunc(...args: any[]): boolean { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); return keyMatch(name1, name2); -}; +} // keyMatch2 determines whether key1 matches the pattern of key2 (similar to RESTful path), // key2 can contain a *. // For example, '/foo/bar' matches '/foo/*', '/resource1' matches '/:resource' -const keyMatch2: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { +function keyMatch2(key1: string, key2: string): boolean { key2 = key2.replace(/\/\*/g, '/.*'); const regexp: RegExp = new RegExp(/(.*):[^/]+(.*)/g); @@ -55,19 +55,19 @@ const keyMatch2: (key1: string, key2: string) => boolean = (key1: string, key2: } return regexMatch(key1, key2); -}; +} // keyMatch2Func is the wrapper for keyMatch2. -const keyMatch2Func: (...args: any[]) => boolean = (...args: any[]) => { +function keyMatch2Func(...args: any[]): boolean { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); return keyMatch2(name1, name2); -}; +} // keyMatch3 determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. // For example, '/foo/bar' matches '/foo/*', '/resource1' matches '/{resource}' -const keyMatch3: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { +function keyMatch3(key1: string, key2: string): boolean { key2 = key2.replace(/\/\*/g, '/.*'); const regexp: RegExp = new RegExp(/(.*){[^/]+}(.*)/g); @@ -79,33 +79,33 @@ const keyMatch3: (key1: string, key2: string) => boolean = (key1: string, key2: } return regexMatch(key1, key2); -}; +} // keyMatch3Func is the wrapper for keyMatch3. -const keyMatch3Func: (...args: any[]) => boolean = (...args: any[]) => { +function keyMatch3Func(...args: any[]): boolean { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); return keyMatch3(name1, name2); -}; +} // regexMatch determines whether key1 matches the pattern of key2 in regular expression. -const regexMatch: (key1: string, key2: string) => boolean = (key1: string, key2: string) => { +function regexMatch(key1: string, key2: string): boolean { return new RegExp(key2).test(key1); -}; +} // regexMatchFunc is the wrapper for regexMatch. -const regexMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { +function regexMatchFunc(...args: any[]): boolean { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); return regexMatch(name1, name2); -}; +} // ipMatch determines whether IP address ip1 matches the pattern of IP address ip2, // ip2 can be an IP address or a CIDR pattern. // For example, '192.168.2.123' matches '192.168.2.0/24' -const ipMatch: (ip1: string, ip2: string) => boolean = (ip1: string, ip2: string) => { +function ipMatch(ip1: string, ip2: string): boolean { // check ip1 if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { throw new Error( @@ -125,15 +125,15 @@ const ipMatch: (ip1: string, ip2: string) => boolean = (ip1: string, ip2: string } return ip.isEqual(ip1, ip2); } -}; +} // ipMatchFunc is the wrapper for ipMatch. -const ipMatchFunc: (...args: any[]) => boolean = (...args: any[]) => { +function ipMatchFunc(...args: any[]): boolean { const ip1: string = _.toString(args[0]); const ip2: string = _.toString(args[1]); return ipMatch(ip1, ip2); -}; +} // generateGFunction is the factory method of the g(_, _) function. const generateGFunction: (rm: rbac.RoleManager) => any = (rm: rbac.RoleManager) => { From 9135b77c0f2ce1902e70b136ed57070cac9b8e2c Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 00:07:10 +0800 Subject: [PATCH 126/497] Improve the format of fileAdapter.ts --- src/persist/fileAdapter.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 8e6b8aa1..aa469385 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -27,8 +27,7 @@ export class FileAdapter implements Adapter { this.loadPolicyFile(model, Helper.loadPolicyLine); } - private loadPolicyFile(model: Model, handler: (line: string, model: Model) => void - ) { + private loadPolicyFile(model: Model, handler: (line: string, model: Model) => void) { const bodyBuf = readFileSync(this.filePath); const lines = bodyBuf.toString().split('\n'); lines.forEach((n, index) => { @@ -98,8 +97,7 @@ export class FileAdapter implements Adapter { /** * removeFilteredPolicy removes policy rules that match the filter from the storage. */ - public removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[] - ): void { + public removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): void { throw new Error('not implemented'); } } From db49da39cbdefe31cfb951bcae66f92bcfe07394 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 00:21:13 +0800 Subject: [PATCH 127/497] Modify generateGFunction() to normal functions in builtinOperators.ts --- src/util/builtinOperators.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 47a89b20..b2a69709 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -136,8 +136,8 @@ function ipMatchFunc(...args: any[]): boolean { } // generateGFunction is the factory method of the g(_, _) function. -const generateGFunction: (rm: rbac.RoleManager) => any = (rm: rbac.RoleManager) => { - const func: (...args: any[]) => boolean = (...args: any[]) => { +function generateGFunction(rm: rbac.RoleManager): any { + return function func(...args: any[]): boolean { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); @@ -150,8 +150,7 @@ const generateGFunction: (rm: rbac.RoleManager) => any = (rm: rbac.RoleManager) return rm.hasLink(name1, name2, domain); } }; - return func; -}; +} export { keyMatchFunc, From a77e084f076104a2977667fbf324a4c1d52b7107 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 10:56:47 +0800 Subject: [PATCH 128/497] Modify arrow functions to normal functions in util.ts --- src/util/util.ts | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/util/util.ts b/src/util/util.ts index 1d95da54..e06969cf 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -16,48 +16,47 @@ import * as _ from 'lodash'; // escapeAssertion escapes the dots in the assertion, // because the expression evaluation doesn't support such variable names. - -const escapeAssertion: (s: string) => string = (s: string) => { +function escapeAssertion(s: string): string { s = s.replace(/r\./g, 'r_'); s = s.replace(/p\./g, 'p_'); return s; -}; +} // removeComments removes the comments starting with # in the text. -const removeComments: (s: string) => string = (s: string) => { +function removeComments(s: string): string { const pos = s.indexOf('#'); return pos > -1 ? _.trim(s.slice(0, pos)) : s; -}; +} // arrayEquals determines whether two string arrays are identical. -const arrayEquals: (a: string[], b: string[]) => boolean = (a: string[], b: string[]) => { +function arrayEquals(a: string[], b: string[]): boolean { return _.isEqual(a, b); -}; +} // array2DEquals determines whether two 2-dimensional string arrays are identical. -const array2DEquals: (a: [string[]], b: [string[]]) => boolean = (a: [string[]], b: [string[]]) => { +function array2DEquals(a: [string[]], b: [string[]]): boolean { return _.isEqual(a, b); -}; +} // arrayRemoveDuplicates removes any duplicated elements in a string array. -const arrayRemoveDuplicates: (s: string[]) => string[] = (s: string[]) => { +function arrayRemoveDuplicates(s: string[]): string[] { return _.uniq(s); -}; +} // arrayToString gets a printable string for a string array. -const arrayToString: (a: string[]) => string = (a: string[]) => { +function arrayToString(a: string[]): string { return _.join(a, ', '); -}; +} // paramsToString gets a printable string for variable number of parameters. -const paramsToString: (...v: string[]) => string = (...v: string[]) => { +function paramsToString(...v: string[]): string { return _.join(v, ', '); -}; +} // setEquals determines whether two string sets are identical. -const setEquals: (a: string[], b: string[]) => boolean = (a: string[], b: string[]) => { +function setEquals(a: string[], b: string[]): boolean { return _.isEqual(_.sortedUniq(a), _.sortedUniq(b)); -}; +} export { escapeAssertion, From fce15b5bca1a3e9fe29c932268463c310a3c9228 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 11:14:53 +0800 Subject: [PATCH 129/497] Add TestKeyMatchCustomModel, not finished. --- test/model.test.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/model.test.ts b/test/model.test.ts index 62076580..877f5cf7 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -203,3 +203,29 @@ test('TestKeyMatch2Model', () => { testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); }); + +function customFunction(key1: string, key2: string): boolean { + if (key1 === '/alice_data2/myid/using/res_id' && key2 === '/alice_data/:resource') { + return true; + } else if (key1 === '/alice_data2/myid/using/res_id' && key2 === '/alice_data2/:id/using/:resId') { + return true; + } else { + return false; + } +} + +function customFunctionWrapper(...args: any[]): boolean { + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); + + return customFunction(name1, name2); +} + +test('TestKeyMatchCustomModel', () => { + const e = new Enforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); + + // e.addFunction('keyMatchCustom', customFunctionWrapper); + + testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); + testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); +}); From 0b4b03f5d72f02f3147d685a81ffb721748a6080 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 11:17:41 +0800 Subject: [PATCH 130/497] Add TestIPMatchModel. --- test/model.test.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/model.test.ts b/test/model.test.ts index 877f5cf7..af9c5390 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -229,3 +229,27 @@ test('TestKeyMatchCustomModel', () => { testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); }); + +test('TestIPMatchModel', () => { + const e = new Enforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); + + testEnforce(e, '192.168.2.123', 'data1', 'read', true); + testEnforce(e, '192.168.2.123', 'data1', 'write', false); + testEnforce(e, '192.168.2.123', 'data2', 'read', false); + testEnforce(e, '192.168.2.123', 'data2', 'write', false); + + testEnforce(e, '192.168.0.123', 'data1', 'read', false); + testEnforce(e, '192.168.0.123', 'data1', 'write', false); + testEnforce(e, '192.168.0.123', 'data2', 'read', false); + testEnforce(e, '192.168.0.123', 'data2', 'write', false); + + testEnforce(e, '10.0.0.5', 'data1', 'read', false); + testEnforce(e, '10.0.0.5', 'data1', 'write', false); + testEnforce(e, '10.0.0.5', 'data2', 'read', false); + testEnforce(e, '10.0.0.5', 'data2', 'write', true); + + testEnforce(e, '192.168.0.1', 'data1', 'read', false); + testEnforce(e, '192.168.0.1', 'data1', 'write', false); + testEnforce(e, '192.168.0.1', 'data2', 'read', false); + testEnforce(e, '192.168.0.1', 'data2', 'write', false); +}); From d27d5fe0afccc032c4717607572d71c945b2460f Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 11:22:12 +0800 Subject: [PATCH 131/497] Add TestPriorityModel and TestPriorityModelIndeterminate. --- test/model.test.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/model.test.ts b/test/model.test.ts index af9c5390..fee821f9 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -253,3 +253,22 @@ test('TestIPMatchModel', () => { testEnforce(e, '192.168.0.1', 'data2', 'read', false); testEnforce(e, '192.168.0.1', 'data2', 'write', false); }); + +test('TestPriorityModel', () => { + const e = new Enforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', true); + testEnforce(e, 'bob', 'data2', 'write', false); +}); + +test('TestPriorityModelIndeterminate', () => { + const e = new Enforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); + + testEnforce(e, 'alice', 'data1', 'read', false); +}); From c63951022cb24d73bf891c19648cd2973ad4f6bd Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 11:47:17 +0800 Subject: [PATCH 132/497] Add Travis CI. --- .travis.yml | 8 ++++++++ README.md | 1 + 2 files changed, 9 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..91370123 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: node_js + +sudo: false + +node_js: + - 'stable' + - '8' + - '6' \ No newline at end of file diff --git a/README.md b/README.md index a4a4f67f..d64e8c45 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ node-casbin ==== [![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) +[![Build Status](https://travis-ci.org/casbin/node-casbin.svg?branch=master)](https://travis-ci.org/casbin/node-casbin) [![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) [![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](http://www.patreon.com/yangluo) From cca58be6080963da882d34a117f1154cbc9b1f08 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 11:58:13 +0800 Subject: [PATCH 133/497] Add TestKeyMatchModelInMemoryDeny. --- test/enforcer.test.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 4db3b7de..3fe45bfe 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -19,7 +19,7 @@ function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: bo expect(e.enforce(sub, obj, act)).toBe(res); } -test('testKeyMatchModelInMemory', () => { +test('TestKeyMatchModelInMemory', () => { const m = Enforcer.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); @@ -77,3 +77,17 @@ test('testKeyMatchModelInMemory', () => { testEnforce(e, 'cathy', '/cathy_data', 'POST', true); testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); }); + +test('TestKeyMatchModelInMemoryDeny', () => { + const m = Enforcer.newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('e', 'e', '!some(where (p.eft == deny))'); + m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); + + const a = new FileAdapter('examples/keymatch_policy.csv'); + + const e = new Enforcer(m, a); + + testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); +}); From 3fe33de9655a29b27ff3a076e45f1bd7713fabef Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 5 Aug 2018 12:13:37 +0800 Subject: [PATCH 134/497] :pencil2: fix typo --- src/model/model.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/model/model.ts b/src/model/model.ts index 12b897c6..b6b7b8de 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -209,7 +209,7 @@ export class Model { } // getFilteredPolicy gets rules based on field filters from a policy. - public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): string[][] { + public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): [string[]] { const res = []; const astMap = _.get(this.model, sec); @@ -229,6 +229,7 @@ export class Model { } } + // @ts-ignore return res; } From 29b2d6e28e35ba0d19359604a5db8655abd6953e Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 5 Aug 2018 12:14:28 +0800 Subject: [PATCH 135/497] :hammer: change static method loadFunctionMap's return --- src/model/functionMap.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index d247dc6e..f0edf1f3 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -26,7 +26,7 @@ export class FunctionMap { } // loadFunctionMap loads an initial function map. - public static loadFunctionMap(): Map { + public static loadFunctionMap(): FunctionMap { const fm = new FunctionMap(); fm.addFunction('keyMatch', util.keyMatchFunc); @@ -34,7 +34,7 @@ export class FunctionMap { fm.addFunction('regexMatch', util.regexMatchFunc); fm.addFunction('ipMatch', util.ipMatchFunc); - return fm.getFunctions(); + return fm; } // addFunction adds an expression function. From fcb5db23f07d229756d642f4fc766adfbbb63d64 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 13:09:44 +0800 Subject: [PATCH 136/497] Modify README's code to typescript. --- README.md | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index d64e8c45..0a040965 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,19 @@ node-casbin [![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](http://www.patreon.com/yangluo) [![Sourcegraph Badge](https://sourcegraph.com/github.com/casbin/casbin/-/badge.svg)](https://sourcegraph.com/github.com/casbin/casbin?badge) -**News**: still worry about how to write the correct Node-Casbin policy? ``Casbin online editor`` is coming to help! Try it at: http://casbin.org/editor/ +**News**: still worry about how to write the correct node-casbin policy? ``Casbin online editor`` is coming to help! Try it at: http://casbin.org/editor/ ![casbin Logo](casbin-logo.png) -node-casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). This project is a Node.JS port of the original Golang [Casbin](https://github.com/casbin/casbin). +node-casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). + +## All the languages supported by Casbin: + +- Golang: [Casbin](https://github.com/casbin/casbin) (production-ready) +- Java: [jCasbin](https://github.com/casbin/jcasbin) (production-ready) +- PHP: [PHP-Casbin](https://github.com/sstutz/php-casbin) (experimental) +- Node.js: [node-casbin](https://github.com/casbin/node-casbin) (experimental) +- C++: xCasbin (WIP) ## Table of contents @@ -97,8 +105,6 @@ What node-casbin does NOT do: ## Installation -For Maven: - TBD ## Documentation @@ -120,18 +126,18 @@ You can also use the online editor (http://casbin.org/editor/) to write your nod 1. New a node-casbin enforcer with a model file and a policy file: - ```java - Enforcer enforcer = new Enforcer("path/to/model.conf", "path/to/policy.csv"); + ```typescript + const enforcer = new Enforcer('path/to/model.conf', 'path/to/policy.csv'); ``` Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#persistence) section for details. 2. Add an enforcement hook into your code right before the access happens: - ```java - String sub = "alice"; // the user that wants to access a resource. - String obj = "data1"; // the resource that is going to be accessed. - String act = "read"; // the operation that the user performs on the resource. + ```typescript + const sub = 'alice'; // the user that wants to access a resource. + const obj = 'data1'; // the resource that is going to be accessed. + const act = 'read'; // the operation that the user performs on the resource. if (enforcer.enforce(sub, obj, act) == true) { // permit alice to read data1 @@ -142,13 +148,13 @@ Note: you can also initialize an enforcer with policy in DB instead of file, see 3. Besides the static policy file, node-casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: - ```java - Roles roles = enforcer.getRoles("alice"); + ```typescript + const roles = enforcer.getRoles('alice'); ``` See [Policy management APIs](#policy-management) for more usage. -4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/src/test) package for more usage. +4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. ## Policy management @@ -179,9 +185,9 @@ The role manager is used to manage the RBAC role hierarchy (user-role mapping) i Role manager | Author | Description ----|----|---- -[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/rbac/DefaultRoleManager.java) | node-casbin | Supports role hierarchy stored in node-casbin policy +[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) | node-casbin | Supports role hierarchy stored in node-casbin policy -For developers: all role managers must implement the [RoleManager](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/rbac/RoleManager.java) interface. [Default Role Manager](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/rbac/DefaultRoleManager.java) can be used as a reference implementation. +For developers: all role managers must implement the [RoleManager](https://github.com/casbin/node-casbin/blob/master/src/rbac/roleManager.ts) interface. [Default Role Manager](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) can be used as a reference implementation. ## Examples From 104c6c751f85640cb7e72d4901abda7f22efccb4 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 5 Aug 2018 13:18:04 +0800 Subject: [PATCH 137/497] Add code coverage. --- .travis.yml | 10 +++++++++- README.md | 1 + package.json | 1 + yarn.lock | 27 +++++++++++++++++++++++++-- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 91370123..e70b4051 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,4 +5,12 @@ sudo: false node_js: - 'stable' - '8' - - '6' \ No newline at end of file + - '6' + +script: echo "Running tests against $(node -v)..." + +jobs: + include: + - stage: Produce Coverage + node_js: node + script: jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage \ No newline at end of file diff --git a/README.md b/README.md index 0a040965..68c783f1 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ node-casbin [![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) [![Build Status](https://travis-ci.org/casbin/node-casbin.svg?branch=master)](https://travis-ci.org/casbin/node-casbin) +[![Coverage Status](https://coveralls.io/repos/github/casbin/node-casbin/badge.svg?branch=master)](https://coveralls.io/github/casbin/node-casbin?branch=master) [![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) [![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](http://www.patreon.com/yangluo) diff --git a/package.json b/package.json index 1791836b..89c267e6 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "typescript": "^2.9.2" }, "dependencies": { + "coveralls": "^3.0.2", "expression-eval": "^1.3.0", "fs-extra": "^7.0.0", "ip": "^1.1.5", diff --git a/yarn.lock b/yarn.lock index edf3fc69..3d0d9e84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -719,6 +719,17 @@ cosmiconfig@^5.0.2: js-yaml "^3.9.0" parse-json "^4.0.0" +coveralls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.2.tgz#f5a0bcd90ca4e64e088b710fa8dda640aea4884f" + dependencies: + growl "~> 1.10.0" + js-yaml "^3.11.0" + lcov-parse "^0.0.10" + log-driver "^1.2.7" + minimist "^1.2.0" + request "^2.85.0" + cpx@^1.5.0: version "1.5.0" resolved "http://registry.npm.taobao.org/cpx/download/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" @@ -1288,6 +1299,10 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +"growl@~> 1.10.0": + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + growly@^1.3.0: version "1.3.0" resolved "http://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -2183,7 +2198,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "4.0.0" resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" -js-yaml@^3.7.0, js-yaml@^3.9.0: +js-yaml@^3.11.0, js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.12.0" resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: @@ -2306,6 +2321,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcov-parse@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + left-pad@^1.3.0: version "1.3.0" resolved "http://registry.npm.taobao.org/left-pad/download/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -2421,6 +2440,10 @@ lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: version "4.17.10" resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + log-symbols@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -3134,7 +3157,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@^2.87.0: +request@^2.85.0, request@^2.87.0: version "2.87.0" resolved "http://registry.npm.taobao.org/request/download/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" dependencies: From 66a6bc0617112d8b7a055c73f7e958271dd46990 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 5 Aug 2018 16:02:05 +0800 Subject: [PATCH 138/497] :sparkles: add internal APIs for enforcer --- src/enforcer.ts | 94 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 85 insertions(+), 9 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 5c9edc03..ba02adb8 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -1,13 +1,13 @@ // Copyright 2018 The Casbin Authors. All Rights Reserved. // -// Licensed under the Apache License, Version 2.0 (the "License"); +// Licensed under the Apache License, Version 2.0 (the 'License'); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, +// distributed under the License is distributed on an 'AS IS' BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. @@ -21,11 +21,13 @@ import * as _ from 'lodash'; import { Adapter, FileAdapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; +const NotImplemented = 'not implemented'; + // Enforcer is the main interface for authorization enforcement and policy management. export class Enforcer { public model: Model; private modelPath: string; - private fm: Map; + private fm: FunctionMap; public eft: Effector; private adapter: FilteredAdapter | Adapter; @@ -272,15 +274,15 @@ export class Enforcer { this.model.buildRoleLinks(this.rm); } - // Enforce decides whether a "subject" can access a "object" with the - // operation "action", input parameters are usually: (sub, obj, act). + // Enforce decides whether a 'subject' can access a 'object' with the + // operation 'action', input parameters are usually: (sub, obj, act). public enforce(...rvals: any[]): boolean { if (!this.enabled) { return true; } const functions: { [key: string]: any } = {}; - this.fm.forEach((value, key) => { + this.fm.getFunctions().forEach((value: any, key: string) => { functions[key] = value; }); @@ -324,7 +326,7 @@ export class Enforcer { parameters[token] = pvals[j].trim(); }); - const result = expression({...parameters, ...functions}); + const result = expression({ ...parameters, ...functions }); // logPrint(`Result: ${result}`); switch (typeof result) { @@ -371,14 +373,14 @@ export class Enforcer { const parameters: { [key: string]: any } = {}; // @ts-ignore this.model.model.get('r').get('r').tokens.forEach((token, j) => { - parameters[token] = rvals[j]; + parameters[token] = rvals[j]; }); // @ts-ignore this.model.model.get('p').get('p').tokens.forEach((token) => { parameters[token] = ''; }); - const result = expression({...parameters, ...functions}); + const result = expression({ ...parameters, ...functions }); // logPrint(`Result: ${result}`); if (result) { @@ -410,4 +412,78 @@ export class Enforcer { return res; } + + // **************Internal API************* + // addPolicy adds a rule to the current policy. + public addPolicy(sec: string | any[], key?: string, rule?: string[]): boolean { + if (typeof sec === 'string' && key && rule) { + const ruleAdded = this.model.addPolicy(sec, key, rule); + if (!ruleAdded) { + return ruleAdded; + } + + if (this.adapter !== null && this.autoSave) { + this.adapter.addPolicy(sec, key, rule); + if (this.watcher !== null) { + // error intentionally ignored + this.watcher.update(); + } + } + + return ruleAdded; + } else if (sec instanceof Array) { + return this.addNamedPolicy('p', sec); + } else { + return false; + } + } + + // removePolicy removes a rule from the current policy. + public removePolicy(sec: string | any[], key?: string, rule?: string[]): boolean { + if (typeof sec === 'string' && key && rule) { + const ruleRemoved = this.model.removePolicy(sec, key, rule); + if (!ruleRemoved) { + return ruleRemoved; + } + + if (this.adapter !== null && this.autoSave) { + this.adapter.removePolicy(sec, key, rule); + if (this.watcher !== null) { + // error intentionally ignored + this.watcher.update(); + } + } + + return ruleRemoved; + } else if (sec instanceof Array) { + return this.removeNamedPolicy('p', sec); + } else { + return false; + } + } + + // removeFilteredPolicy removes rules based on field filters from the current policy. + public removeFilteredPolicy(sec: string | number, key: string | string[], fieldIndex?: number, fieldValues?: string[]): boolean { + if (typeof sec === 'string' && typeof key === 'string' && fieldIndex && fieldValues instanceof Array) { + const ruleRemoved = this.model.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); + if (!ruleRemoved) { + return ruleRemoved; + } + + if (this.adapter !== null && this.autoSave) { + this.adapter.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); + if (this.watcher !== null) { + // error intentionally ignored + this.watcher.update(); + } + } + + return ruleRemoved; + } else if (typeof sec === 'number' && key instanceof Array) { + return this.removeFilteredNamedPolicy('p', sec, key); + } else { + return false; + } + } + } From 10fae6f9c0f0bbdad1e6ea57fc1e5a7e15e7a1ed Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 5 Aug 2018 16:02:42 +0800 Subject: [PATCH 139/497] :sparkles: add management APIs for enforcer --- src/enforcer.ts | 204 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) diff --git a/src/enforcer.ts b/src/enforcer.ts index ba02adb8..b9edc7bf 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -486,4 +486,208 @@ export class Enforcer { } } + // **************Management API************* + // getAllSubjects gets the list of subjects that show up in the current policy. + public getAllSubjects(): string[] { + return this.getAllNamedSubjects('p'); + } + + // getAllNamedSubjects gets the list of subjects that show up in the current named policy. + public getAllNamedSubjects(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('p', ptype, 0); + } + + // getAllObjects gets the list of objects that show up in the current policy. + public getAllObjects(): string[] { + return this.getAllNamedObjects('p'); + } + + // getAllNamedObjects gets the list of objects that show up in the current named policy. + public getAllNamedObjects(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('p', ptype, 1); + } + + // getAllActions gets the list of actions that show up in the current policy. + public getAllActions(): string[] { + return this.getAllNamedActions('p'); + } + + // getAllNamedActions gets the list of actions that show up in the current named policy. + public getAllNamedActions(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('p', ptype, 2); + } + + // getAllRoles gets the list of roles that show up in the current policy. + public getAllRoles(): string[] { + return this.getAllNamedRoles('g'); + } + + // getAllNamedRoles gets the list of roles that show up in the current named policy. + public getAllNamedRoles(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('g', ptype, 1); + } + + // getPolicy gets all the authorization rules in the policy. + public getPolicy(): [string[]] { + return this.getNamedPolicy('p'); + } + + // getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. + public getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): [string[]] { + return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); + } + + // getNamedPolicy gets all the authorization rules in the named policy. + public getNamedPolicy(ptype: string): [string[]] { + return this.model.getPolicy('p', ptype); + } + + // getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. + public getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): [string[]] { + return this.model.getFilteredPolicy('p', ptype, fieldIndex, ...fieldValues); + } + + // getGroupingPolicy gets all the role inheritance rules in the policy. + public getGroupingPolicy(): [string[]] { + return this.getNamedGroupingPolicy('g'); + } + + // getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + public getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): [string[]] { + return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + // getNamedGroupingPolicy gets all the role inheritance rules in the policy. + public getNamedGroupingPolicy(ptype: string): [string[]] { + return this.model.getPolicy('g', ptype); + } + + // getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + public getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): [string[]] { + return this.model.getFilteredPolicy('g', ptype, fieldIndex, ...fieldValues); + } + + // hasPolicy determines whether an authorization rule exists. + public hasPolicy(...params: any[]): boolean { + return this.hasNamedPolicy('p', ...params); + } + + // hasNamedPolicy determines whether a named authorization rule exists. + public hasNamedPolicy(ptype: string, ...params: any[]): boolean { + if (params.length === 1 && params[0] instanceof Array) { + return this.model.hasPolicy('p', ptype, params[0]); + } + + return this.model.hasPolicy('p', ptype, params); + } + + // addNamedPolicy adds an authorization rule to the current named policy. + // If the rule already exists, the function returns false and the rule will not be added. + // Otherwise the function returns true by adding the new rule. + public addNamedPolicy(ptype: string, params: any[]): boolean { + let ruleAdded = false; + if (params.length === 1 && params[0] instanceof Array) { + ruleAdded = this.addPolicy('p', ptype, params[0]); + } else { + ruleAdded = this.addPolicy('p', ptype, params); + } + + return ruleAdded; + } + + // removeNamedPolicy removes an authorization rule from the current named policy. + public removeNamedPolicy(ptype: string, params: any[]): boolean { + let ruleRemoved = false; + if (params.length === 1 && params[0] instanceof Array) { + ruleRemoved = this.removePolicy('p', ptype, params[0]); + } else { + ruleRemoved = this.removePolicy('p', ptype, params); + } + + return ruleRemoved; + } + + // removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. + public removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): boolean { + return this.removeFilteredPolicy('p', ptype, fieldIndex, fieldValues); + } + + // hasGroupingPolicy determines whether a role inheritance rule exists. + public hasGroupingPolicy(...params: any[]): boolean { + return this.hasNamedGroupingPolicy('g', params); + } + + // hasNamedGroupingPolicy determines whether a named role inheritance rule exists. + public hasNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { + if (params.length === 1 && params[0] instanceof Array) { + return this.model.hasPolicy('g', ptype, params[0]); + } + + return this.model.hasPolicy('g', ptype, params); + } + + // addGroupingPolicy adds a role inheritance rule to the current policy. + // If the rule already exists, the function returns false and the rule will not be added. + // Otherwise the function returns true by adding the new rule. + public addGroupingPolicy(...params: any[]): boolean { + return this.addNamedGroupingPolicy('g', params); + } + + // addNamedGroupingPolicy adds a named role inheritance rule to the current policy. + // If the rule already exists, the function returns false and the rule will not be added. + // Otherwise the function returns true by adding the new rule. + public addNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { + let ruleadded = false; + if (params.length === 1 && params[0] instanceof Array) { + ruleadded = this.addPolicy('g', ptype, params[0]); + } else { + ruleadded = this.addPolicy('g', ptype, params); + } + + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + + return ruleadded; + } + + // removeGroupingPolicy removes a role inheritance rule from the current policy. + public removeGroupingPolicy(...params: any[]): boolean { + return this.removeNamedGroupingPolicy('g', params); + } + + // removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. + public removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): boolean { + return this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + // removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. + public removeNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { + let ruleRemoved = false; + if (params.length === 1 && params[0] instanceof Array) { + ruleRemoved = this.removePolicy('g', ptype, params[0]); + } else { + ruleRemoved = this.removePolicy('g', ptype, params); + } + + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + return ruleRemoved; + } + + // removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. + public removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): boolean { + const ruleRemoved = this.removeFilteredPolicy('g', ptype, fieldIndex, fieldValues); + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + return ruleRemoved; + } + + // addFunction adds a customized function. + public addFunction(name: string, func: any): void { + this.fm.addFunction(name, func); + } + } From b3556a18075c1be83847ac08555e1b685ddcadba Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 5 Aug 2018 16:03:05 +0800 Subject: [PATCH 140/497] :sparkles: add rbac APIs for enforcer --- src/enforcer.ts | 97 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/enforcer.ts b/src/enforcer.ts index b9edc7bf..e5ab4816 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -690,4 +690,101 @@ export class Enforcer { this.fm.addFunction(name, func); } + // **************RBAC API************* + // getRolesForUser gets the roles that a user has. + public getRolesForUser(name: string): string[] { + // @ts-ignore + const rm = this.model.model.get('g').get('g').rm; + const result = rm.getRoles(name); + return result; + } + + // getUsersForRole gets the users that has a role. + public getUsersForRole(name: string): string[] { + // @ts-ignore + const rm = this.model.model.get('g').get('g').rm; + const result = rm.getUsers(name); + return result; + } + + // hasRoleForUser determines whether a user has a role. + public hasRoleForUser(name: string, role: string): boolean { + const roles = this.getRolesForUser(name); + let hasRole: boolean = false; + for (const r of roles) { + if (r === role) { + hasRole = true; + break; + } + } + + return hasRole; + } + + // addRoleForUser adds a role for a user. + // Returns false if the user already has the role (aka not affected). + public addRoleForUser(user: string, role: string): boolean { + return this.addGroupingPolicy(user, role); + } + + // deleteRoleForUser deletes a role for a user. + // Returns false if the user does not have the role (aka not affected). + public deleteRoleForUser(user: string, role: string): boolean { + return this.removeGroupingPolicy(user, role); + } + + // DeleteRolesForUser deletes all roles for a user. + // Returns false if the user does not have any roles (aka not affected). + public deleteRolesForUser(user: string): boolean { + return this.removeFilteredGroupingPolicy(0, user); + } + + // deleteUser deletes a user. + // Returns false if the user does not exist (aka not affected). + public deleteUser(user: string): boolean { + return this.removeFilteredGroupingPolicy(0, user); + } + + // deleteRole deletes a role. + public deleteRole(role: string) { + this.removeFilteredGroupingPolicy(1, role); + this.removeFilteredPolicy(0, role); + } + + // deletePermission deletes a permission. + // Returns false if the permission does not exist (aka not affected). + public deletePermission(...permission: string[]): boolean { + return this.removeFilteredPolicy(1, permission); + } + + // addPermissionForUser adds a permission for a user or role. + // Returns false if the user or role already has the permission (aka not affected). + public addPermissionForUser(user: string, ...permission: string[]): boolean { + permission.unshift(user); + return this.addPolicy(permission); + } + + // deletePermissionForUser deletes a permission for a user or role. + // Returns false if the user or role does not have the permission (aka not affected). + public deletePermissionForUser(user: string, ...permission: string[]): boolean { + permission.unshift(user); + return this.removePolicy(permission); + } + + // deletePermissionsForUser deletes permissions for a user or role. + // Returns false if the user or role does not have any permissions (aka not affected). + public deletePermissionsForUser(user: string): boolean { + return this.removeFilteredPolicy(0, user); + } + + // getPermissionsForUser gets permissions for a user or role. + public getPermissionsForUser(user: string): [string[]] { + return this.getFilteredPolicy(0, user); + } + + // hasPermissionForUser determines whether a user has a permission. + public hasPermissionForUser(user: string, ...permission: string[]): boolean { + permission.unshift(user); + return this.hasPolicy(permission); + } } From bf8f89f4c16100db510c6a3a72abc963ee6fe9eb Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 5 Aug 2018 16:17:24 +0800 Subject: [PATCH 141/497] :pencil2: fix quote typo --- src/enforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index e5ab4816..89b0a7f8 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -7,7 +7,7 @@ // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an 'AS IS' BASIS, +// distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. From 9dacb1e5f7e754be16bec233e9033ffdbc2cc7f6 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 5 Aug 2018 16:25:17 +0800 Subject: [PATCH 142/497] :pencil2: fix quote typo --- src/enforcer.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index e5ab4816..ac4adc53 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -1,13 +1,13 @@ // Copyright 2018 The Casbin Authors. All Rights Reserved. // -// Licensed under the Apache License, Version 2.0 (the 'License'); +// Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an 'AS IS' BASIS, +// distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. @@ -274,8 +274,8 @@ export class Enforcer { this.model.buildRoleLinks(this.rm); } - // Enforce decides whether a 'subject' can access a 'object' with the - // operation 'action', input parameters are usually: (sub, obj, act). + // Enforce decides whether a "subject" can access a "object" with the + // operation "action", input parameters are usually: (sub, obj, act). public enforce(...rvals: any[]): boolean { if (!this.enabled) { return true; From 08a3574e58118b0afbebf87567d6ae723acdd9eb Mon Sep 17 00:00:00 2001 From: nodece Date: Mon, 6 Aug 2018 15:50:25 +0800 Subject: [PATCH 143/497] Remove logPrintf method --- src/util/log.ts | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/util/log.ts b/src/util/log.ts index 09d23c66..69f1f3e0 100644 --- a/src/util/log.ts +++ b/src/util/log.ts @@ -16,16 +16,9 @@ let enableLog = false; // logPrint prints the log. -function logPrint(...v: any[]): void { +function logPrint(v: any): void { if (enableLog) { - console.log(...v); - } -} - -// logPrintf prints the log with the format. -function logPrintf(format: string, ...v: any[]): void { - if (enableLog) { - console.log(...v); + console.log(v); } } @@ -37,4 +30,4 @@ function setEnableLog(val: boolean) { enableLog = val; } -export { logPrint, logPrintf, getEnableLog, setEnableLog }; +export { logPrint, getEnableLog, setEnableLog }; From be1e6c326b089adad395b16547949ff0e102b58d Mon Sep 17 00:00:00 2001 From: nodece Date: Mon, 6 Aug 2018 15:50:44 +0800 Subject: [PATCH 144/497] Remove logPrintf test --- test/util.test.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/util.test.ts b/test/util.test.ts index cbb6356a..e6556c79 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -34,11 +34,6 @@ test('test logPrint', () => { expect(util.logPrint('test log')).toBeUndefined(); }); -test('test logPrintf', () => { - util.setEnableLog(true); - expect(util.logPrintf('format', 'test log')).toBeUndefined(); -}); - test('test Valuate', () => { expect(compile('1 + 1 === 2')()).toEqual(true); expect(compile('1 + 1 !== 2')()).toEqual(false); From a726c5638fba1b3cb87df7ae56a5a0b91e1f63eb Mon Sep 17 00:00:00 2001 From: nodece Date: Mon, 6 Aug 2018 21:45:41 +0800 Subject: [PATCH 145/497] :recycle: Refactoring code and fix bad code --- src/model/model.ts | 155 ++++++++++++++++++++++----------------------- 1 file changed, 74 insertions(+), 81 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index b6b7b8de..538f027d 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -56,7 +56,7 @@ export class Model { private loadSection(cfg: Config, sec: string): void { // console.log('loadSection: ', sec); let i = 1; - for (;;) { + for (; ;) { if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { break; } else { @@ -121,74 +121,61 @@ export class Model { // printModel prints the model to the log. public printModel(): void { util.logPrint('Model:'); - for (const sec in this.model) { - if (_.has(this.model, sec)) { - const astMap = _.get(this.model, sec); - for (const key in astMap) { - if (astMap.hasOwnProperty(key)) { - const ast = _.get(astMap, key); - util.logPrintf(`${sec}.${key}: ${ast.value}`); - } - } - } - } + this.model.forEach((value, key) => { + value.forEach((ast, astKey) => { + util.logPrint(`${key}.${astKey}: ${ast.value}`); + }); + }); } // buildRoleLinks initializes the roles in RBAC. public buildRoleLinks(rm: rbac.RoleManager): void { - const astMap = _.get(this.model, 'g'); - for (const key in astMap) { - if (astMap.hasOwnProperty(key)) { - const ast = _.get(astMap, key); - ast.buildRoleLinks(rm); - } + const astMap = this.model.get('g'); + if (!astMap) { + return; } + astMap.forEach(value => { + value.buildRoleLinks(rm); + }); } // clearPolicy clears all current policy. public clearPolicy(): void { - let astMap = _.get(this.model, 'p'); - for (const key in astMap) { - if (astMap.hasOwnProperty(key)) { - const ast = _.get(astMap, key); - ast.policy = []; + this.model.forEach((value, key) => { + if (key === 'p' || key === 'g') { + value.forEach(ast => { + ast.policy = []; + }); } - } - - astMap = _.get(this.model, 'g'); - for (const key in astMap) { - if (astMap.hasOwnProperty(key)) { - const ast = _.get(astMap, key); - ast.policy = []; - } - } + }); } // getPolicy gets all rules in a policy. - public getPolicy(sec: string, key: string): [string[]] { - const astMap = _.get(this.model, sec); - const ast = _.get(astMap, key); - return ast.policy; + public getPolicy(sec: string, key: string): string[][] { + const policy: string[][] = []; + const ast = (this.model.get(sec) || new Map()).get(key); + if (ast) { + policy.push(...ast.policy); + } + return policy; } // hasPolicy determines whether a model has the specified policy rule. public hasPolicy(sec: string, key: string, rule: string[]): boolean { - const astMap = _.get(this.model, sec); - const ast = _.get(astMap, key); - for (const r of ast.policy) { - if (util.arrayEquals(rule, r)) { - return true; - } + const ast = (this.model.get(sec) || new Map()).get(key); + if (!ast) { + return false; } - - return false; + return ast.policy.some((n: string[]) => n === rule); } // addPolicy adds a policy rule to the model. public addPolicy(sec: string, key: string, rule: string[]): boolean { if (!this.hasPolicy(sec, key, rule)) { - const astMap = _.get(this.model, sec); - const ast = _.get(astMap, key); + const ast = (this.model.get(sec) || new Map()).get(key); + if (!ast) { + return false; + } ast.policy.push(rule); return true; } @@ -199,8 +186,10 @@ export class Model { // removePolicy removes a policy rule from the model. public removePolicy(sec: string, key: string, rule: string[]): boolean { if (this.hasPolicy(sec, key, rule)) { - const astMap = _.get(this.model, sec); - const ast = _.get(astMap, key); + const ast = (this.model.get(sec) || new Map()).get(key); + if (!ast) { + return true; + } ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); return true; } @@ -209,11 +198,17 @@ export class Model { } // getFilteredPolicy gets rules based on field filters from a policy. - public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): [string[]] { - const res = []; - - const astMap = _.get(this.model, sec); - const ast = _.get(astMap, key); + public getFilteredPolicy( + sec: string, + key: string, + fieldIndex: number, + ...fieldValues: string[] + ): string[][] { + const res: string[][] = []; + const ast = (this.model.get(sec) || new Map()).get(key); + if (!ast) { + return res; + } for (const rule of ast.policy) { let matched = true; for (let i = 0; i < fieldValues.length; i++) { @@ -229,17 +224,22 @@ export class Model { } } - // @ts-ignore return res; } // removeFilteredPolicy removes policy rules based on field filters from the model. - public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): boolean { + public removeFilteredPolicy( + sec: string, + key: string, + fieldIndex: number, + ...fieldValues: string[] + ): boolean { const res = []; let bool = false; - - const astMap = _.get(this.model, sec); - const ast = _.get(astMap, key); + const ast = (this.model.get(sec) || new Map()).get(key); + if (!ast) { + return bool; + } for (const rule of ast.policy) { let matched = true; for (let i = 0; i < fieldValues.length; i++) { @@ -262,35 +262,28 @@ export class Model { } // getValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed. - public getValuesForFieldInPolicy(sec: string, key: string, fieldIndex: number): string[] { - const values = []; - - const astMap = _.get(this.model, sec); - const ast = _.get(astMap, key); - for (const rule of ast.policy) { - values.push(rule[fieldIndex]); + public getValuesForFieldInPolicy( + sec: string, + key: string, + fieldIndex: number + ): string[] { + const values: string[] = []; + const ast = (this.model.get(sec) || new Map()).get(key); + if (!ast) { + return values; } - - return util.arrayRemoveDuplicates(values); + return util.arrayRemoveDuplicates(ast.policy.map((n: string[]) => n[fieldIndex])); } // printPolicy prints the policy to log. public printPolicy(): void { util.logPrint('Policy:'); - let astMap = _.get(this.model, 'p'); - for (const key in astMap) { - if (astMap.hasOwnProperty(key)) { - const ast = _.get(astMap, key); - util.logPrint(`key, : ${ast.value}, : , ${ast.policy}`); + this.model.forEach((map, key) => { + if (key === 'p' || key === 'g') { + map.forEach(ast => { + util.logPrint(`key, : ${ast.value}, : , ${ast.policy}`); + }); } - } - - astMap = _.get(this.model, 'g'); - for (const key in astMap) { - if (astMap.hasOwnProperty(key)) { - const ast = _.get(astMap, key); - util.logPrint(`key, : ${ast.value}, : , ${ast.policy}`); - } - } + }); } } From c7f6c78d7e7e57282668407c5adf571da4d42cfc Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 7 Aug 2018 00:13:17 +0800 Subject: [PATCH 146/497] Fix parse error --- src/config.ts | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/config.ts b/src/config.ts index acb8ffee..2c6f51d4 100644 --- a/src/config.ts +++ b/src/config.ts @@ -91,23 +91,13 @@ export class Config { } else if (line.startsWith('[') && line.endsWith(']')) { section = line.substring(1, line.length - 1); } else { - const [option] = line.split('='); - - const optionIndex = line.indexOf(option); - if (optionIndex === -1) { - throw new Error(`parse the content error : line ${index + 1}`); - } - - let value = line.substring(optionIndex + 1).trim(); - if (value.startsWith('=')) { - value = value.substring(1); - } - - if (option && value) { - this.addConfig(section, option.trim(), value.trim()); - } else { + const equalIndex = line.indexOf('='); + if (equalIndex === -1) { throw new Error(`parse the content error : line ${index + 1}`); } + const key = line.substring(0, equalIndex); + const value = line.substring(equalIndex + 1); + this.addConfig(section, key.trim(), value.trim()); } }); } From b2710b6683d79238c61f6a5f7d4bbea18a8710df Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 7 Aug 2018 00:22:43 +0800 Subject: [PATCH 147/497] Delete spaces in a string --- src/persist/helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/persist/helper.ts b/src/persist/helper.ts index a47abc29..404a2392 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -10,7 +10,7 @@ export class Helper { return; } - const tokens = line.split(', '); + const tokens = line.split(', ').map(n => n.trim()); const key = tokens[0]; const sec = key.substring(0, 1); From d628e5c1d55175f6462e3143574d4da2a344c37d Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 7 Aug 2018 00:36:00 +0800 Subject: [PATCH 148/497] Fix model add error --- src/model/model.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 538f027d..414ed1e5 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -86,10 +86,14 @@ export class Model { ast.value = util.removeComments(util.escapeAssertion(value)); } - const assertionMap = new Map(); - assertionMap.set(key, ast); - - this.model.set(sec, assertionMap); + const nodeMap = this.model.get(sec); + if (nodeMap) { + nodeMap.set(key, ast); + } else { + const assertionMap = new Map(); + assertionMap.set(key, ast); + this.model.set(sec, assertionMap); + } return true; } From 78aa95ee298f9ba9dded0dfd4622ab2a0d918a2e Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 7 Aug 2018 00:39:20 +0800 Subject: [PATCH 149/497] Fix type error --- src/enforcer.ts | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index ac4adc53..3b5e3752 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -192,17 +192,13 @@ export class Enforcer { } // loadPolicy reloads the policy from file/database. - public loadPolicy(): boolean { + public loadPolicy(): void { this.model.clearPolicy(); - if (!this.adapter.loadPolicy(this.model)) { - return false; - } - + this.adapter.loadPolicy(this.model); this.model.printPolicy(); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); } - return true; } // loadFilteredPolicy reloads a filtered policy from file/database. @@ -327,7 +323,6 @@ export class Enforcer { }); const result = expression({ ...parameters, ...functions }); - // logPrint(`Result: ${result}`); switch (typeof result) { case 'boolean': @@ -528,42 +523,42 @@ export class Enforcer { } // getPolicy gets all the authorization rules in the policy. - public getPolicy(): [string[]] { + public getPolicy(): string[][] { return this.getNamedPolicy('p'); } // getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. - public getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): [string[]] { + public getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); } // getNamedPolicy gets all the authorization rules in the named policy. - public getNamedPolicy(ptype: string): [string[]] { + public getNamedPolicy(ptype: string): string[][] { return this.model.getPolicy('p', ptype); } // getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. - public getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): [string[]] { + public getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { return this.model.getFilteredPolicy('p', ptype, fieldIndex, ...fieldValues); } // getGroupingPolicy gets all the role inheritance rules in the policy. - public getGroupingPolicy(): [string[]] { + public getGroupingPolicy(): string[][] { return this.getNamedGroupingPolicy('g'); } // getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. - public getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): [string[]] { + public getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); } // getNamedGroupingPolicy gets all the role inheritance rules in the policy. - public getNamedGroupingPolicy(ptype: string): [string[]] { + public getNamedGroupingPolicy(ptype: string): string[][] { return this.model.getPolicy('g', ptype); } // getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. - public getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): [string[]] { + public getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { return this.model.getFilteredPolicy('g', ptype, fieldIndex, ...fieldValues); } @@ -778,7 +773,7 @@ export class Enforcer { } // getPermissionsForUser gets permissions for a user or role. - public getPermissionsForUser(user: string): [string[]] { + public getPermissionsForUser(user: string): string[][] { return this.getFilteredPolicy(0, user); } From 7e78cbaa9b4461cb7f241743fa83c4afcd107be8 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 7 Aug 2018 15:19:52 +0800 Subject: [PATCH 150/497] Improve the code format. --- src/enforcer.ts | 1 + src/model/model.ts | 20 +++----------------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 3b5e3752..5aa27788 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -195,6 +195,7 @@ export class Enforcer { public loadPolicy(): void { this.model.clearPolicy(); this.adapter.loadPolicy(this.model); + this.model.printPolicy(); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); diff --git a/src/model/model.ts b/src/model/model.ts index 414ed1e5..b696988a 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -202,12 +202,7 @@ export class Model { } // getFilteredPolicy gets rules based on field filters from a policy. - public getFilteredPolicy( - sec: string, - key: string, - fieldIndex: number, - ...fieldValues: string[] - ): string[][] { + public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): string[][] { const res: string[][] = []; const ast = (this.model.get(sec) || new Map()).get(key); if (!ast) { @@ -232,12 +227,7 @@ export class Model { } // removeFilteredPolicy removes policy rules based on field filters from the model. - public removeFilteredPolicy( - sec: string, - key: string, - fieldIndex: number, - ...fieldValues: string[] - ): boolean { + public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): boolean { const res = []; let bool = false; const ast = (this.model.get(sec) || new Map()).get(key); @@ -266,11 +256,7 @@ export class Model { } // getValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed. - public getValuesForFieldInPolicy( - sec: string, - key: string, - fieldIndex: number - ): string[] { + public getValuesForFieldInPolicy(sec: string, key: string, fieldIndex: number): string[] { const values: string[] = []; const ast = (this.model.get(sec) || new Map()).get(key); if (!ast) { From 01c735be548f4c0cd18ab1bb4aa2b00bb7d5f5f5 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 7 Aug 2018 15:30:05 +0800 Subject: [PATCH 151/497] Fix the TestKeyMatchCustomModel in the test. --- test/model.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/model.test.ts b/test/model.test.ts index fee821f9..2764b40c 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -13,6 +13,7 @@ // limitations under the License. import { Enforcer } from '../src/enforcer'; +import * as _ from 'lodash'; function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); @@ -224,7 +225,7 @@ function customFunctionWrapper(...args: any[]): boolean { test('TestKeyMatchCustomModel', () => { const e = new Enforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); - // e.addFunction('keyMatchCustom', customFunctionWrapper); + e.addFunction('keyMatchCustom', customFunctionWrapper); testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); From e900d43ea3a587a69194aa61a318b8e1f7ede9b0 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 7 Aug 2018 15:44:55 +0800 Subject: [PATCH 152/497] Add Sequelize Adapter to README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 68c783f1..d5cada38 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,7 @@ In node-casbin, the policy storage is implemented as an adapter (aka middleware Adapter | Type | Author | Description ----|------|----|---- [File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | node-casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files +[Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence From abb699ba93d5f0a29449e39b530dc422e5736578 Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 7 Aug 2018 21:37:23 +0800 Subject: [PATCH 153/497] Refactoring code to publish v1.0.0 --- .gitignore | 2 +- .vscode/launch.json | 19 ---------- package.json | 17 +++++---- scripts/build.js | 44 ------------------------ src/casbin.ts | 3 ++ src/persist/helper.ts | 9 ++--- tsconfig.json | 5 +-- yarn.lock | 80 ++++++------------------------------------- 8 files changed, 27 insertions(+), 152 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 scripts/build.js diff --git a/.gitignore b/.gitignore index 0861c72e..4e18e7ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .idea +.vscode node_modules lib -dist yarn-error.log diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 5cb28bb7..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "jest:debug", - "type": "node", - "request": "launch", - "args": ["${relativeFile}"], - "program": "${workspaceRoot}/node_modules/jest-cli/bin/jest.js", - "runtimeArgs": ["-r", "ts-node/register"] - }, - { - "name": "ts:debug", - "type": "node", - "request": "launch", - "args": ["-r", "ts-node/register", "${relativeFile}"] - } - ] -} diff --git a/package.json b/package.json index 89c267e6..83ccbbf1 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { - "name": "node-casbin", + "name": "casbin", "version": "1.0.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", "scripts": { "precommit": "lint-staged", - "build": "node scripts/build.js", + "prepublish": "yarn run lint && yarn run test", + "build": "rimraf lib && tsc", "lint": "tslint \"src/**/*.ts\"", "fix": "tslint \"src/**/*.ts\" --fix", "test": "jest" @@ -19,23 +20,21 @@ "husky": "^0.14.3", "jest": "^23.4.2", "lint-staged": "^7.2.0", - "lodash": "^4.17.10", - "prettier": "^1.13.7", - "rollup": "^0.62.0", - "rollup-plugin-node-resolve": "^3.3.0", + "rimraf": "^2.6.2", "ts-jest": "22.4.6", - "ts-node": "^7.0.0", "tslint": "^5.11.0", "typescript": "^2.9.2" }, "dependencies": { "coveralls": "^3.0.2", "expression-eval": "^1.3.0", - "fs-extra": "^7.0.0", "ip": "^1.1.5", - "jsep": "^0.3.4", "lodash": "^4.17.10" }, + "files": [ + "lib", + "examples" + ], "homepage": "http://casbin.org", "repository": { "type": "git", diff --git a/scripts/build.js b/scripts/build.js deleted file mode 100644 index 5de90ed7..00000000 --- a/scripts/build.js +++ /dev/null @@ -1,44 +0,0 @@ -const ts = require('typescript'); -const fs = require('fs-extra'); -const path = require('path'); -const rollup = require('rollup'); - -function clean() { - fs.removeSync('lib'); -} - -function build() { - const tsConfig = path.resolve('tsconfig.json'); - const { config: options, error } = ts.parseConfigFileTextToJson( - tsConfig, - ts.sys.readFile(tsConfig) - ); - if (error) { - throw new Error(error); - } - options.outDir = path.resolve('lib/es6'); - options.declaration = true; - options.declarationDir = path.resolve('lib/es6'); - - const fileNames = [path.resolve('src/casbin.ts')]; - const program = ts.createProgram(fileNames, options); - const emitResult = program.emit(); - if (emitResult.emitSkipped) { - throw new Error(`Compile typescript error`); - } - - rollup - .rollup({ - input: path.resolve('lib/es6/casbin.js'), - plugins: [require('rollup-plugin-node-resolve')()] - }) - .then(bundle => - bundle.write({ - file: path.resolve('lib/casbin.js'), - format: 'cjs' - }) - ); -} - -clean(); -build(); diff --git a/src/casbin.ts b/src/casbin.ts index b6b820a4..cd360b03 100644 --- a/src/casbin.ts +++ b/src/casbin.ts @@ -1 +1,4 @@ export * from './enforcer'; +export * from './effect'; +export * from './persist'; +export * from './rbac'; diff --git a/src/persist/helper.ts b/src/persist/helper.ts index 404a2392..3058a3e9 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -2,24 +2,19 @@ import { Model } from '../model'; export class Helper { public static loadPolicyLine(line: string, model: Model) { - if (line === '') { - return; - } - - if (line.charAt(0) === '#') { + if (line === '' || line.charAt(0) === '#') { return; } const tokens = line.split(', ').map(n => n.trim()); - const key = tokens[0]; const sec = key.substring(0, 1); const item = model.model.get(sec); if (!item) { return; } - const policy = item.get(key); + const policy = item.get(key); if (!policy) { return; } diff --git a/tsconfig.json b/tsconfig.json index e0ce1d7c..6078bf7c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,12 @@ { "compilerOptions": { "target": "es6", - "module": "esnext", + "module": "commonjs", "moduleResolution": "node", "declaration": true, + "declarationDir": "lib", "strict": true, - "outDir": "lib/es6", + "outDir": "lib", "strictPropertyInitialization": false }, "include": ["src/**/*.ts"] diff --git a/yarn.lock b/yarn.lock index 3d0d9e84..605b03be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,10 +22,6 @@ dependencies: any-observable "^0.3.0" -"@types/estree@0.0.39": - version "0.0.39" - resolved "http://registry.npm.taobao.org/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - "@types/ip@^0.0.31": version "0.0.31" resolved "http://registry.npm.taobao.org/@types/ip/download/@types/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" @@ -204,7 +200,7 @@ array-unique@^0.3.2: version "0.3.2" resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arrify@^1.0.0, arrify@^1.0.1: +arrify@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -506,18 +502,10 @@ buffer-from@^1.0.0: version "1.1.0" resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" -buffer-from@^1.1.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" -builtin-modules@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" - cache-base@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -868,7 +856,7 @@ detect-newline@^2.1.0: version "2.1.0" resolved "http://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -diff@^3.1.0, diff@^3.2.0: +diff@^3.2.0: version "3.5.0" resolved "http://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -1197,14 +1185,6 @@ fs-extra@6.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.0: - version "7.0.0" - resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^1.2.5: version "1.2.5" resolved "http://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -1616,10 +1596,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-module@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-module/download/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - is-number@^2.1.0: version "2.1.0" resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2240,7 +2216,7 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" -jsep@^0.3.0, jsep@^0.3.4: +jsep@^0.3.0: version "0.3.4" resolved "http://registry.npm.taobao.org/jsep/download/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" @@ -2436,10 +2412,14 @@ lodash.sortby@^4.7.0: version "4.7.0" resolved "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" -lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: +lodash@^4.13.1, lodash@^4.17.4, lodash@^4.17.5: version "4.17.10" resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +lodash@^4.17.10: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" @@ -2480,10 +2460,6 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -make-error@^1.1.1: - version "1.3.4" - resolved "http://registry.npm.taobao.org/make-error/download/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" - makeerror@1.0.x: version "1.0.11" resolved "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -2996,10 +2972,6 @@ preserve@^0.2.0: version "0.2.0" resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^1.13.7: - version "1.13.7" - resolved "http://registry.npm.taobao.org/prettier/download/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" - pretty-format@^22.4.0, pretty-format@^22.4.3: version "22.4.3" resolved "http://registry.npm.taobao.org/pretty-format/download/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" @@ -3208,7 +3180,7 @@ resolve@1.1.7: version "1.1.7" resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: +resolve@^1.1.7, resolve@^1.3.2: version "1.8.1" resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: @@ -3231,27 +3203,12 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.5.4, rimraf@^2.6.1: +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" -rollup-plugin-node-resolve@^3.3.0: - version "3.3.0" - resolved "http://registry.npm.taobao.org/rollup-plugin-node-resolve/download/rollup-plugin-node-resolve-3.3.0.tgz#c26d110a36812cbefa7ce117cadcd3439aa1c713" - dependencies: - builtin-modules "^2.0.0" - is-module "^1.0.0" - resolve "^1.1.6" - -rollup@^0.62.0: - version "0.62.0" - resolved "http://registry.npm.taobao.org/rollup/download/rollup-0.62.0.tgz#4ca8b3c9582195dc9341ff8a1375f58319b95bfc" - dependencies: - "@types/estree" "0.0.39" - "@types/node" "*" - rsvp@^3.3.3: version "3.6.2" resolved "http://registry.npm.taobao.org/rsvp/download/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" @@ -3701,19 +3658,6 @@ ts-jest@22.4.6: source-map-support "^0.5.5" yargs "^11.0.0" -ts-node@^7.0.0: - version "7.0.0" - resolved "http://registry.npm.taobao.org/ts-node/download/ts-node-7.0.0.tgz#a94a13c75e5e1aa6b82814b84c68deb339ba7bff" - dependencies: - arrify "^1.0.0" - buffer-from "^1.1.0" - diff "^3.1.0" - make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.5.6" - yn "^2.0.0" - tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -3977,7 +3921,3 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" - -yn@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/yn/download/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" From 977200654f208e44b5807c88700cfbd8b1444fe8 Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 9 Aug 2018 12:47:20 +0800 Subject: [PATCH 154/497] Update the enforcer file code doc to complete --- src/enforcer.ts | 562 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 464 insertions(+), 98 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 5aa27788..81d3be26 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -23,7 +23,9 @@ import { DefaultRoleManager, RoleManager } from './rbac'; const NotImplemented = 'not implemented'; -// Enforcer is the main interface for authorization enforcement and policy management. +/** + * Enforcer is the main interface for authorization enforcement and policy management. + */ export class Enforcer { public model: Model; private modelPath: string; @@ -37,13 +39,23 @@ export class Enforcer { private autoSave: boolean; private autoBuildRoleLinks: boolean; - // constructor is the constructor for Enforcer. - // It creates an enforcer via file or DB. - // File: - // const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); - // MySQL DB: - // const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); - // const e = new Enforcer('path/to/basic_model.conf', a); + /** + * constructor is the constructor for Enforcer. + * It creates an enforcer via file or DB. + * + * File: + * ```js + * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); + * ``` + * + * MySQL DB: + * ```js + * const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); + * const e = new Enforcer('path/to/basic_model.conf', a); + * ``` + * + * @param params + */ constructor(...params: any[]) { this.rm = new DefaultRoleManager(10); this.eft = new DefaultEffector(); @@ -84,13 +96,21 @@ export class Enforcer { } } - // initWithFile initializes an enforcer with a model file and a policy file. + /** + * initWithFile initializes an enforcer with a model file and a policy file. + * @param modelPath model file path + * @param policyPath policy file path + */ public initWithFile(modelPath: string, policyPath: string): void { const a = new FileAdapter(policyPath); this.initWithAdapter(modelPath, a); } - // initWithAdapter initializes an enforcer with a database adapter. + /** + * initWithAdapter initializes an enforcer with a database adapter. + * @param modelPath model file path + * @param adapter current adapter instance + */ public initWithAdapter(modelPath: string, adapter: Adapter): void { const m = Enforcer.newModel(modelPath, ''); this.initWithModelAndAdapter(m, adapter); @@ -98,7 +118,11 @@ export class Enforcer { this.modelPath = modelPath; } - // initWithModelAndAdapter initializes an enforcer with a model and a database adapter. + /** + * initWithModelAndAdapter initializes an enforcer with a model and a database adapter. + * @param m model instance + * @param adapter current adapter instance + */ public initWithModelAndAdapter(m: Model, adapter: Adapter | null): void { if (adapter) { this.adapter = adapter; @@ -123,6 +147,9 @@ export class Enforcer { this.autoBuildRoleLinks = true; } + /** + * newModel creates a model. + */ public static newModel(...text: string[]): Model { const m = new Model(); @@ -139,9 +166,11 @@ export class Enforcer { return m; } - // loadModel reloads the model from the model CONF file. - // Because the policy is attached to a model, - // so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). + /** + * loadModel reloads the model from the model CONF file. + * Because the policy is attached to a model, + * so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). + */ public loadModel(): void { this.model = Enforcer.newModel(); this.model.loadModel(this.modelPath); @@ -149,49 +178,81 @@ export class Enforcer { this.fm = FunctionMap.loadFunctionMap(); } - // getModel gets the current model. + /** + * getModel gets the current model. + * + * @return the model of the enforcer. + */ public getModel(): Model { return this.model; } - // setModel sets the current model. + /** + * setModel sets the current model. + * + * @param m the model. + */ public setModel(m: Model): void { this.model = m; this.fm = FunctionMap.loadFunctionMap(); } - // getAdapter gets the current adapter. + /** + * getAdapter gets the current adapter. + * + * @return the adapter of the enforcer. + */ public getAdapter(): Adapter { return this.adapter; } - // setAdapter sets the current adapter. + /** + * setAdapter sets the current adapter. + * + * @param adapter the adapter. + */ public setAdapter(adapter: Adapter): void { this.adapter = adapter; } - // setWatcher sets the current watcher. + /** + * setWatcher sets the current watcher. + * + * @param watcher the watcher. + */ public setWatcher(watcher: Watcher): void { this.watcher = watcher; watcher.setUpdateCallback(() => this.loadPolicy()); } - // setRoleManager sets the current role manager. + /** + * setRoleManager sets the current role manager. + * + * @param rm the role manager. + */ public setRoleManager(rm: RoleManager): void { this.rm = rm; } - // setEffector sets the current effector. + /** + * setEffector sets the current effector. + * + * @param eft the effector. + */ public setEffector(eft: Effector): void { this.eft = eft; } - // clearPolicy clears all policy. + /** + * clearPolicy clears all policy. + */ public clearPolicy(): void { this.model.clearPolicy(); } - // loadPolicy reloads the policy from file/database. + /** + * loadPolicy reloads the policy from file/database. + */ public loadPolicy(): void { this.model.clearPolicy(); this.adapter.loadPolicy(this.model); @@ -202,7 +263,11 @@ export class Enforcer { } } - // loadFilteredPolicy reloads a filtered policy from file/database. + /** + * loadFilteredPolicy reloads a filtered policy from file/database. + * + * @param filter the filter used to specify which type of policy should be loaded. + */ public loadFilteredPolicy(filter: Filter): boolean { this.model.clearPolicy(); @@ -219,7 +284,11 @@ export class Enforcer { return true; } - // isFiltered returns true if the loaded policy has been filtered. + /** + * isFiltered returns true if the loaded policy has been filtered. + * + * @return if the loaded policy has been filtered. + */ public isFiltered(): boolean { if ((this.adapter as FilteredAdapter).isFiltered) { return (this.adapter as FilteredAdapter).isFiltered(); @@ -227,7 +296,10 @@ export class Enforcer { return false; } - // savePolicy saves the current policy (usually after changed with Casbin API) back to file/databasthis. + /** + * savePolicy saves the current policy (usually after changed with + * Casbin API) back to file/database. + */ public savePolicy(): boolean { if (this.isFiltered()) { throw new Error('cannot save a filtered policy'); @@ -241,38 +313,63 @@ export class Enforcer { return true; } - // enableEnforce changes the enforcing state of Casbin, when Casbin is disabled, - // all access will be allowed by the Enforce() function. + /** + * enableEnforce changes the enforcing state of Casbin, when Casbin is + * disabled, all access will be allowed by the enforce() function. + * + * @param enable whether to enable the enforcer. + */ public enableEnforce(enable: boolean): void { this.enabled = enable; } - // enableLog changes whether to print Casbin log to the standard output. + /** + * enableLog changes whether to print Casbin log to the standard output. + * + * @param enable whether to enable Casbin's log. + */ public static enableLog(enable: boolean): void { setEnableLog(enable); } - // enableAutoSave controls whether to save a policy rule automatically to - // the adapter when it is added or removed. + /** + * enableAutoSave controls whether to save a policy rule automatically to + * the adapter when it is added or removed. + * + * @param autoSave whether to enable the AutoSave feature. + */ public enableAutoSave(autoSave: boolean): void { this.autoSave = autoSave; } - // enableAutoBuildRoleLinks controls whether to rebuild the - // role inheritance relations when a role is added or deleted. + /** + * enableAutoBuildRoleLinks controls whether to save a policy rule + * automatically to the adapter when it is added or removed. + * + * @param autoBuildRoleLinks whether to automatically build the role links. + */ public enableAutoBuildRoleLinks(autoBuildRoleLinks: boolean): void { this.autoBuildRoleLinks = autoBuildRoleLinks; } - // buildRoleLinks manually rebuild the role inheritance relations. + /** + * buildRoleLinks manually rebuild the + * role inheritance relations. + */ public buildRoleLinks() { // error intentionally ignored this.rm.clear(); this.model.buildRoleLinks(this.rm); } - // Enforce decides whether a "subject" can access a "object" with the - // operation "action", input parameters are usually: (sub, obj, act). + /** + * enforce decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ public enforce(...rvals: any[]): boolean { if (!this.enabled) { return true; @@ -410,7 +507,9 @@ export class Enforcer { } // **************Internal API************* - // addPolicy adds a rule to the current policy. + /** + * addPolicy adds a rule to the current policy. + */ public addPolicy(sec: string | any[], key?: string, rule?: string[]): boolean { if (typeof sec === 'string' && key && rule) { const ruleAdded = this.model.addPolicy(sec, key, rule); @@ -434,7 +533,9 @@ export class Enforcer { } } - // removePolicy removes a rule from the current policy. + /** + * removePolicy removes a rule from the current policy. + */ public removePolicy(sec: string | any[], key?: string, rule?: string[]): boolean { if (typeof sec === 'string' && key && rule) { const ruleRemoved = this.model.removePolicy(sec, key, rule); @@ -458,7 +559,9 @@ export class Enforcer { } } - // removeFilteredPolicy removes rules based on field filters from the current policy. + /** + * removeFilteredPolicy removes rules based on field filters from the current policy. + */ public removeFilteredPolicy(sec: string | number, key: string | string[], fieldIndex?: number, fieldValues?: string[]): boolean { if (typeof sec === 'string' && typeof key === 'string' && fieldIndex && fieldValues instanceof Array) { const ruleRemoved = this.model.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); @@ -483,92 +586,209 @@ export class Enforcer { } // **************Management API************* - // getAllSubjects gets the list of subjects that show up in the current policy. + /** + * getAllSubjects gets the list of subjects that show up in the current policy. + * + * @return all the subjects in "p" policy rules. It actually collects the + * 0-index elements of "p" policy rules. So make sure your subject + * is the 0-index element, like (sub, obj, act). Duplicates are removed. + */ public getAllSubjects(): string[] { return this.getAllNamedSubjects('p'); } - // getAllNamedSubjects gets the list of subjects that show up in the current named policy. + /** + * getAllNamedSubjects gets the list of subjects that show up in the currentnamed policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make sure + * your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ public getAllNamedSubjects(ptype: string): string[] { return this.model.getValuesForFieldInPolicy('p', ptype, 0); } - // getAllObjects gets the list of objects that show up in the current policy. + /** + * getAllObjects gets the list of objects that show up in the current policy. + * + * @return all the objects in "p" policy rules. It actually collects the + * 1-index elements of "p" policy rules. So make sure your object + * is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ public getAllObjects(): string[] { return this.getAllNamedObjects('p'); } - // getAllNamedObjects gets the list of objects that show up in the current named policy. + /** + * getAllNamedObjects gets the list of objects that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the objects in policy rules of the ptype type. It actually + * collects the 1-index elements of the policy rules. So make sure + * your object is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ public getAllNamedObjects(ptype: string): string[] { return this.model.getValuesForFieldInPolicy('p', ptype, 1); } - // getAllActions gets the list of actions that show up in the current policy. + /** + * getAllActions gets the list of actions that show up in the current policy. + * + * @return all the actions in "p" policy rules. It actually collects + * the 2-index elements of "p" policy rules. So make sure your action + * is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ public getAllActions(): string[] { return this.getAllNamedActions('p'); } - // getAllNamedActions gets the list of actions that show up in the current named policy. + /** + * GetAllNamedActions gets the list of actions that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the actions in policy rules of the ptype type. It actually + * collects the 2-index elements of the policy rules. So make sure + * your action is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ public getAllNamedActions(ptype: string): string[] { return this.model.getValuesForFieldInPolicy('p', ptype, 2); } - // getAllRoles gets the list of roles that show up in the current policy. + /** + * getAllRoles gets the list of roles that show up in the current policy. + * + * @return all the roles in "g" policy rules. It actually collects + * the 1-index elements of "g" policy rules. So make sure your + * role is the 1-index element, like (sub, role). + * Duplicates are removed. + */ public getAllRoles(): string[] { return this.getAllNamedRoles('g'); } - // getAllNamedRoles gets the list of roles that show up in the current named policy. + /** + * getAllNamedRoles gets the list of roles that show up in the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make + * sure your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ public getAllNamedRoles(ptype: string): string[] { return this.model.getValuesForFieldInPolicy('g', ptype, 1); } - // getPolicy gets all the authorization rules in the policy. + /** + * getPolicy gets all the authorization rules in the policy. + * + * @return all the "p" policy rules. + */ public getPolicy(): string[][] { return this.getNamedPolicy('p'); } - // getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. + /** + * getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules. + */ public getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); } - // getNamedPolicy gets all the authorization rules in the named policy. + /** + * getNamedPolicy gets all the authorization rules in the named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return the "p" policy rules of the specified ptype. + */ public getNamedPolicy(ptype: string): string[][] { return this.model.getPolicy('p', ptype); } - // getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. + /** + * getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules of the specified ptype. + */ public getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { return this.model.getFilteredPolicy('p', ptype, fieldIndex, ...fieldValues); } - // getGroupingPolicy gets all the role inheritance rules in the policy. + /** + * getGroupingPolicy gets all the role inheritance rules in the policy. + * + * @return all the "g" policy rules. + */ public getGroupingPolicy(): string[][] { return this.getNamedGroupingPolicy('g'); } - // getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + /** + * getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" means not to match this field. + * @return the filtered "g" policy rules. + */ public getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); } - // getNamedGroupingPolicy gets all the role inheritance rules in the policy. + /** + * getNamedGroupingPolicy gets all the role inheritance rules in the policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return the "g" policy rules of the specified ptype. + */ public getNamedGroupingPolicy(ptype: string): string[][] { return this.model.getPolicy('g', ptype); } - // getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + /** + * getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "g" policy rules of the specified ptype. + */ public getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { return this.model.getFilteredPolicy('g', ptype, fieldIndex, ...fieldValues); } - // hasPolicy determines whether an authorization rule exists. + /** + * hasPolicy determines whether an authorization rule exists. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return whether the rule exists. + */ public hasPolicy(...params: any[]): boolean { return this.hasNamedPolicy('p', ...params); } - // hasNamedPolicy determines whether a named authorization rule exists. + /** + * hasNamedPolicy determines whether a named authorization rule exists. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return whether the rule exists. + */ public hasNamedPolicy(ptype: string, ...params: any[]): boolean { if (params.length === 1 && params[0] instanceof Array) { return this.model.hasPolicy('p', ptype, params[0]); @@ -577,9 +797,15 @@ export class Enforcer { return this.model.hasPolicy('p', ptype, params); } - // addNamedPolicy adds an authorization rule to the current named policy. - // If the rule already exists, the function returns false and the rule will not be added. - // Otherwise the function returns true by adding the new rule. + /** + * addNamedPolicy adds an authorization rule to the current named policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ public addNamedPolicy(ptype: string, params: any[]): boolean { let ruleAdded = false; if (params.length === 1 && params[0] instanceof Array) { @@ -591,7 +817,13 @@ export class Enforcer { return ruleAdded; } - // removeNamedPolicy removes an authorization rule from the current named policy. + /** + * removeNamedPolicy removes an authorization rule from the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ public removeNamedPolicy(ptype: string, params: any[]): boolean { let ruleRemoved = false; if (params.length === 1 && params[0] instanceof Array) { @@ -603,17 +835,35 @@ export class Enforcer { return ruleRemoved; } - // removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. + /** + * removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ public removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): boolean { return this.removeFilteredPolicy('p', ptype, fieldIndex, fieldValues); } - // hasGroupingPolicy determines whether a role inheritance rule exists. - public hasGroupingPolicy(...params: any[]): boolean { + /** + * hasGroupingPolicy determines whether a role inheritance rule exists. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return whether the rule exists. + */ public hasGroupingPolicy(...params: any[]): boolean { return this.hasNamedGroupingPolicy('g', params); } - // hasNamedGroupingPolicy determines whether a named role inheritance rule exists. + /** + * hasNamedGroupingPolicy determines whether a named role inheritance rule exists. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return whether the rule exists. + */ public hasNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { if (params.length === 1 && params[0] instanceof Array) { return this.model.hasPolicy('g', ptype, params[0]); @@ -622,16 +872,27 @@ export class Enforcer { return this.model.hasPolicy('g', ptype, params); } - // addGroupingPolicy adds a role inheritance rule to the current policy. - // If the rule already exists, the function returns false and the rule will not be added. - // Otherwise the function returns true by adding the new rule. + /** + * addGroupingPolicy adds a role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ public addGroupingPolicy(...params: any[]): boolean { return this.addNamedGroupingPolicy('g', params); } - // addNamedGroupingPolicy adds a named role inheritance rule to the current policy. - // If the rule already exists, the function returns false and the rule will not be added. - // Otherwise the function returns true by adding the new rule. + /** + * addNamedGroupingPolicy adds a named role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ public addNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { let ruleadded = false; if (params.length === 1 && params[0] instanceof Array) { @@ -647,17 +908,35 @@ export class Enforcer { return ruleadded; } - // removeGroupingPolicy removes a role inheritance rule from the current policy. + /** + * removeGroupingPolicy removes a role inheritance rule from the current policy. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ public removeGroupingPolicy(...params: any[]): boolean { return this.removeNamedGroupingPolicy('g', params); } - // removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. + /** + * removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ public removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): boolean { return this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); } - // removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. + /** + * removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ public removeNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { let ruleRemoved = false; if (params.length === 1 && params[0] instanceof Array) { @@ -672,7 +951,15 @@ export class Enforcer { return ruleRemoved; } - // removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. + /** + * removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ public removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): boolean { const ruleRemoved = this.removeFilteredPolicy('g', ptype, fieldIndex, fieldValues); if (this.autoBuildRoleLinks) { @@ -681,13 +968,22 @@ export class Enforcer { return ruleRemoved; } - // addFunction adds a customized function. + /** + * addFunction adds a customized function. + * @param name custom function name + * @param func function + */ public addFunction(name: string, func: any): void { this.fm.addFunction(name, func); } // **************RBAC API************* - // getRolesForUser gets the roles that a user has. + /** + * getRolesForUser gets the roles that a user has. + * + * @param name the user. + * @return the roles that the user has. + */ public getRolesForUser(name: string): string[] { // @ts-ignore const rm = this.model.model.get('g').get('g').rm; @@ -695,7 +991,12 @@ export class Enforcer { return result; } - // getUsersForRole gets the users that has a role. + /** + * getUsersForRole gets the users that has a role. + * + * @param name the role. + * @return the users that has the role. + */ public getUsersForRole(name: string): string[] { // @ts-ignore const rm = this.model.model.get('g').get('g').rm; @@ -703,7 +1004,13 @@ export class Enforcer { return result; } - // hasRoleForUser determines whether a user has a role. + /** + * hasRoleForUser determines whether a user has a role. + * + * @param name the user. + * @param role the role. + * @return whether the user has the role. + */ public hasRoleForUser(name: string, role: string): boolean { const roles = this.getRolesForUser(name); let hasRole: boolean = false; @@ -717,68 +1024,127 @@ export class Enforcer { return hasRole; } - // addRoleForUser adds a role for a user. - // Returns false if the user already has the role (aka not affected). + /** + * addRoleForUser adds a role for a user. + * Returns false if the user already has the role (aka not affected). + * + * @param user the user. + * @param role the role. + * @return succeeds or not. + */ public addRoleForUser(user: string, role: string): boolean { return this.addGroupingPolicy(user, role); } - // deleteRoleForUser deletes a role for a user. - // Returns false if the user does not have the role (aka not affected). + /** + * deleteRoleForUser deletes a role for a user. + * Returns false if the user does not have the role (aka not affected). + * + * @param user the user. + * @param role the role. + * @return succeeds or not. + */ public deleteRoleForUser(user: string, role: string): boolean { return this.removeGroupingPolicy(user, role); } - // DeleteRolesForUser deletes all roles for a user. - // Returns false if the user does not have any roles (aka not affected). + /** + * deleteRolesForUser deletes all roles for a user. + * Returns false if the user does not have any roles (aka not affected). + * + * @param user the user. + * @return succeeds or not. + */ public deleteRolesForUser(user: string): boolean { return this.removeFilteredGroupingPolicy(0, user); } - // deleteUser deletes a user. - // Returns false if the user does not exist (aka not affected). + /** + * deleteUser deletes a user. + * Returns false if the user does not exist (aka not affected). + * + * @param user the user. + * @return succeeds or not. + */ public deleteUser(user: string): boolean { return this.removeFilteredGroupingPolicy(0, user); } - // deleteRole deletes a role. + /** + * deleteRole deletes a role. + * + * @param role the role. + */ public deleteRole(role: string) { this.removeFilteredGroupingPolicy(1, role); this.removeFilteredPolicy(0, role); } - // deletePermission deletes a permission. - // Returns false if the permission does not exist (aka not affected). + /** + * deletePermission deletes a permission. + * Returns false if the permission does not exist (aka not affected). + * + * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. + * @return succeeds or not. + */ public deletePermission(...permission: string[]): boolean { return this.removeFilteredPolicy(1, permission); } - // addPermissionForUser adds a permission for a user or role. - // Returns false if the user or role already has the permission (aka not affected). + /** + * addPermissionForUser adds a permission for a user or role. + * Returns false if the user or role already has the permission (aka not affected). + * + * @param user the user. + * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. + * @return succeeds or not. + */ public addPermissionForUser(user: string, ...permission: string[]): boolean { permission.unshift(user); return this.addPolicy(permission); } - // deletePermissionForUser deletes a permission for a user or role. - // Returns false if the user or role does not have the permission (aka not affected). + /** + * deletePermissionForUser deletes a permission for a user or role. + * Returns false if the user or role does not have the permission (aka not affected). + * + * @param user the user. + * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. + * @return succeeds or not. + */ public deletePermissionForUser(user: string, ...permission: string[]): boolean { permission.unshift(user); return this.removePolicy(permission); } - // deletePermissionsForUser deletes permissions for a user or role. - // Returns false if the user or role does not have any permissions (aka not affected). + /** + * deletePermissionsForUser deletes permissions for a user or role. + * Returns false if the user or role does not have any permissions (aka not affected). + * + * @param user the user. + * @return succeeds or not. + */ public deletePermissionsForUser(user: string): boolean { return this.removeFilteredPolicy(0, user); } - // getPermissionsForUser gets permissions for a user or role. + /** + * getPermissionsForUser gets permissions for a user or role. + * + * @param user the user. + * @return the permissions, a permission is usually like (obj, act). It is actually the rule without the subject. + */ public getPermissionsForUser(user: string): string[][] { return this.getFilteredPolicy(0, user); } - // hasPermissionForUser determines whether a user has a permission. + /** + * hasPermissionForUser determines whether a user has a permission. + * + * @param user the user. + * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. + * @return whether the user has the permission. + */ public hasPermissionForUser(user: string, ...permission: string[]): boolean { permission.unshift(user); return this.hasPolicy(permission); From e1ed8f508b720d6e5c082bd61d1934bdf75b1584 Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 9 Aug 2018 13:46:10 +0800 Subject: [PATCH 155/497] Update script and publish v1.0.5 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 83ccbbf1..9fbc63ee 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "casbin", - "version": "1.0.0", + "version": "1.0.5", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", "scripts": { "precommit": "lint-staged", - "prepublish": "yarn run lint && yarn run test", + "prepublish": "yarn run lint && yarn run test && yarn build", "build": "rimraf lib && tsc", "lint": "tslint \"src/**/*.ts\"", "fix": "tslint \"src/**/*.ts\" --fix", From 31e3f9c81ca8cfe7e7cadc60e7eaf7b16f23a2b9 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 9 Aug 2018 19:38:41 +0800 Subject: [PATCH 156/497] Update the installation in README. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d5cada38..292c9f08 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,9 @@ What node-casbin does NOT do: ## Installation -TBD +``` +npm install casbin +``` ## Documentation From e15154161084f140b1bc8aa48c5139e68ee5493d Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 10 Aug 2018 00:02:10 +0800 Subject: [PATCH 157/497] :art: only fileAdapter automatic invoke loadPolicy method, others must invoke manually --- src/enforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 81d3be26..1ad7db3a 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -135,7 +135,7 @@ export class Enforcer { this.initialize(); - if (this.adapter) { + if (this.adapter && (this.adapter instanceof FileAdapter)) { // error intentionally ignored this.loadPolicy(); } From 86923411aecdd6fbdabe831b29e6b03f1a7a7852 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 10 Aug 2018 21:58:04 +0800 Subject: [PATCH 158/497] :rocket: all adapter method support async/await --- src/persist/adapter.ts | 10 ++++---- src/persist/defaultFilteredAdapter.ts | 24 +++++++++---------- src/persist/fileAdapter.ts | 34 +++++++++++++-------------- src/persist/filteredAdapter.ts | 2 +- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/persist/adapter.ts b/src/persist/adapter.ts index f5de9ea0..7326d9c7 100644 --- a/src/persist/adapter.ts +++ b/src/persist/adapter.ts @@ -15,14 +15,14 @@ import { Model } from '../model'; export interface Adapter { - loadPolicy(model: Model): void; + loadPolicy(model: Model): Promise; - savePolicy(model: Model): void; + savePolicy(model: Model): Promise; - addPolicy(sec: string, ptype: string, rule: string[]): void; + addPolicy(sec: string, ptype: string, rule: string[]): Promise; - removePolicy(sec: string, ptype: string, rule: string[]): void; + removePolicy(sec: string, ptype: string, rule: string[]): Promise; removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[] - ): void; + ): Promise; } diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 6da37839..54715f80 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -3,7 +3,7 @@ import { Model } from '../model'; import { FileAdapter } from './fileAdapter'; import { Adapter } from './adapter'; import { Helper } from './helper'; -import { readFileSync } from 'fs'; +import { readFile } from '../util'; export class Filter { public g: string[] = []; @@ -20,14 +20,14 @@ export class DefaultFilteredAdapter extends FileAdapter } // loadPolicy loads all policy rules from the storage. - public loadPolicy(model: Model): void { + public async loadPolicy(model: Model): Promise { this.filtered = false; - super.loadPolicy(model); + await super.loadPolicy(model); } - public loadFilteredPolicy(model: Model, filter: Filter): void { + public async loadFilteredPolicy(model: Model, filter: Filter): Promise { if (!filter) { - this.loadPolicy(model); + await this.loadPolicy(model); return; } @@ -35,15 +35,15 @@ export class DefaultFilteredAdapter extends FileAdapter throw new Error('invalid file path, file path cannot be empty'); } - this.loadFilteredPolicyFile(model, filter, Helper.loadPolicyLine); + await this.loadFilteredPolicyFile(model, filter, Helper.loadPolicyLine); this.filtered = true; } - private loadFilteredPolicyFile(model: Model, filter: Filter, handler: (line: string, model: Model) => void - ) { - const bodyBuf = readFileSync(this.filePath); + private async loadFilteredPolicyFile(model: Model, filter: Filter, handler: (line: string, model: Model) => void + ): Promise { + const bodyBuf = await readFile(this.filePath); const lines = bodyBuf.toString().split('\n'); - lines.forEach((n, index) => { + lines.forEach((n: string, index: number) => { const line = n.trim(); if (!line || DefaultFilteredAdapter.filterLine(line, filter)) { return; @@ -56,11 +56,11 @@ export class DefaultFilteredAdapter extends FileAdapter return this.filtered; } - public savePolicy(model: Model): void { + public async savePolicy(model: Model): Promise { if (this.filtered) { throw new Error('cannot save a filtered policy'); } - super.savePolicy(model); + await super.savePolicy(model); } private static filterLine(line: string, filter: Filter): boolean { diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index aa469385..0427a5af 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -1,8 +1,7 @@ import { Adapter } from './adapter'; import { Model } from '../model'; import { Helper } from './helper'; -import { readFileSync, writeFileSync } from 'fs'; -import { arrayToString } from '../util'; +import { readFile, writeFile, arrayToString } from '../util'; /** * FileAdapter is the file adapter for Casbin. @@ -19,18 +18,18 @@ export class FileAdapter implements Adapter { this.filePath = filePath; } - public loadPolicy(model: Model): void { + public async loadPolicy(model: Model): Promise { if (!this.filePath) { // throw new Error('invalid file path, file path cannot be empty'); return; } - this.loadPolicyFile(model, Helper.loadPolicyLine); + await this.loadPolicyFile(model, Helper.loadPolicyLine); } - private loadPolicyFile(model: Model, handler: (line: string, model: Model) => void) { - const bodyBuf = readFileSync(this.filePath); + private async loadPolicyFile(model: Model, handler: (line: string, model: Model) => void): Promise { + const bodyBuf = await readFile(this.filePath); const lines = bodyBuf.toString().split('\n'); - lines.forEach((n, index) => { + lines.forEach((n: string, index: number) => { const line = n.trim(); if (!line) { return; @@ -42,23 +41,23 @@ export class FileAdapter implements Adapter { /** * addPolicy adds a policy rule to the storage. */ - public addPolicy(sec: string, ptype: string, rule: string[]): void { + public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { throw new Error('not implemented'); } /** * savePolicy saves all policy rules to the storage. */ - public savePolicy(model: Model): void { + public async savePolicy(model: Model): Promise { if (!this.filePath) { // throw new Error('invalid file path, file path cannot be empty'); - return; + return false; } let result = ''; const pList = model.model.get('p'); if (!pList) { - return; + return false; } pList.forEach(n => { n.policy.forEach(m => { @@ -70,7 +69,7 @@ export class FileAdapter implements Adapter { const gList = model.model.get('g'); if (!gList) { - return; + return false; } gList.forEach(n => { n.policy.forEach(m => { @@ -80,24 +79,25 @@ export class FileAdapter implements Adapter { }); }); - this.savePolicyFile(result.trim()); + await this.savePolicyFile(result.trim()); + return true; } - private savePolicyFile(text: string) { - writeFileSync(this.filePath, text); + private async savePolicyFile(text: string): Promise { + await writeFile(this.filePath, text); } /** * removePolicy removes a policy rule from the storage. */ - public removePolicy(sec: string, ptype: string, rule: string[]): void { + public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { throw new Error('not implemented'); } /** * removeFilteredPolicy removes policy rules that match the filter from the storage. */ - public removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): void { + public async removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { throw new Error('not implemented'); } } diff --git a/src/persist/filteredAdapter.ts b/src/persist/filteredAdapter.ts index 9555cd16..924f0e67 100644 --- a/src/persist/filteredAdapter.ts +++ b/src/persist/filteredAdapter.ts @@ -3,7 +3,7 @@ import { Adapter } from './adapter'; export interface FilteredAdapter extends Adapter { // loadFilteredPolicy loads only policy rules that match the filter. - loadFilteredPolicy(model: Model, filter: any): void; + loadFilteredPolicy(model: Model, filter: any): Promise; // isFiltered returns true if the loaded policy has been filtered. isFiltered(): boolean; } From c97c72af60d371dc30b021611a6e30e6b06dd8a8 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 10 Aug 2018 21:58:26 +0800 Subject: [PATCH 159/497] :knife: add async read and write file function --- src/util/util.ts | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/util/util.ts b/src/util/util.ts index e06969cf..c9435e9b 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -13,6 +13,7 @@ // limitations under the License. import * as _ from 'lodash'; +import * as fs from 'fs'; // escapeAssertion escapes the dots in the assertion, // because the expression evaluation doesn't support such variable names. @@ -58,6 +59,30 @@ function setEquals(a: string[], b: string[]): boolean { return _.isEqual(_.sortedUniq(a), _.sortedUniq(b)); } +// readFile return a promise for readFile. +function readFile(path: string, encoding?: string): any { + return new Promise((resolve, reject) => { + fs.readFile(path, encoding || 'utf8', (error, data) => { + if (error) { + reject(error); + } + resolve(data); + }); + }); +} + +// writeFile return a promise for writeFile. +function writeFile(path: string, file: string, encoding?: string): any { + return new Promise((resolve, reject) => { + fs.writeFile(path, file, encoding || 'utf8', (error, data) => { + if (error) { + reject(error); + } + resolve(data); + }); + }); +} + export { escapeAssertion, removeComments, @@ -66,5 +91,7 @@ export { arrayRemoveDuplicates, arrayToString, paramsToString, - setEquals + setEquals, + readFile, + writeFile }; From 8df336e842600207694442f744c57c1bf52242f4 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 10 Aug 2018 21:59:00 +0800 Subject: [PATCH 160/497] :hammer: refactor main file with async/await --- src/enforcer.ts | 121 +++++++++++++++++++++++------------------------- 1 file changed, 58 insertions(+), 63 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 1ad7db3a..d0c98ee6 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -132,19 +132,13 @@ export class Enforcer { this.model = m; this.model.printModel(); this.fm = FunctionMap.loadFunctionMap(); - - this.initialize(); - - if (this.adapter && (this.adapter instanceof FileAdapter)) { - // error intentionally ignored - this.loadPolicy(); - } } - private initialize(): void { + public async initialize(): Promise { this.enabled = true; this.autoSave = true; this.autoBuildRoleLinks = true; + await this.loadPolicy(); } /** @@ -222,7 +216,7 @@ export class Enforcer { */ public setWatcher(watcher: Watcher): void { this.watcher = watcher; - watcher.setUpdateCallback(() => this.loadPolicy()); + watcher.setUpdateCallback(async () => await this.loadPolicy()); } /** @@ -253,9 +247,9 @@ export class Enforcer { /** * loadPolicy reloads the policy from file/database. */ - public loadPolicy(): void { + public async loadPolicy(): Promise { this.model.clearPolicy(); - this.adapter.loadPolicy(this.model); + await this.adapter.loadPolicy(this.model); this.model.printPolicy(); if (this.autoBuildRoleLinks) { @@ -300,11 +294,12 @@ export class Enforcer { * savePolicy saves the current policy (usually after changed with * Casbin API) back to file/database. */ - public savePolicy(): boolean { + public async savePolicy(): Promise { if (this.isFiltered()) { throw new Error('cannot save a filtered policy'); } - if (!this.adapter.savePolicy(this.model)) { + const flag = await this.adapter.savePolicy(this.model); + if (!flag) { return false; } if (this.watcher) { @@ -510,7 +505,7 @@ export class Enforcer { /** * addPolicy adds a rule to the current policy. */ - public addPolicy(sec: string | any[], key?: string, rule?: string[]): boolean { + public async addPolicy(sec: string | any[], key?: string, rule?: string[]): Promise { if (typeof sec === 'string' && key && rule) { const ruleAdded = this.model.addPolicy(sec, key, rule); if (!ruleAdded) { @@ -518,7 +513,7 @@ export class Enforcer { } if (this.adapter !== null && this.autoSave) { - this.adapter.addPolicy(sec, key, rule); + await this.adapter.addPolicy(sec, key, rule); if (this.watcher !== null) { // error intentionally ignored this.watcher.update(); @@ -527,7 +522,7 @@ export class Enforcer { return ruleAdded; } else if (sec instanceof Array) { - return this.addNamedPolicy('p', sec); + return await this.addNamedPolicy('p', sec); } else { return false; } @@ -536,7 +531,7 @@ export class Enforcer { /** * removePolicy removes a rule from the current policy. */ - public removePolicy(sec: string | any[], key?: string, rule?: string[]): boolean { + public async removePolicy(sec: string | any[], key?: string, rule?: string[]): Promise { if (typeof sec === 'string' && key && rule) { const ruleRemoved = this.model.removePolicy(sec, key, rule); if (!ruleRemoved) { @@ -544,7 +539,7 @@ export class Enforcer { } if (this.adapter !== null && this.autoSave) { - this.adapter.removePolicy(sec, key, rule); + await this.adapter.removePolicy(sec, key, rule); if (this.watcher !== null) { // error intentionally ignored this.watcher.update(); @@ -553,7 +548,7 @@ export class Enforcer { return ruleRemoved; } else if (sec instanceof Array) { - return this.removeNamedPolicy('p', sec); + return await this.removeNamedPolicy('p', sec); } else { return false; } @@ -562,7 +557,7 @@ export class Enforcer { /** * removeFilteredPolicy removes rules based on field filters from the current policy. */ - public removeFilteredPolicy(sec: string | number, key: string | string[], fieldIndex?: number, fieldValues?: string[]): boolean { + public async removeFilteredPolicy(sec: string | number, key: string | string[], fieldIndex?: number, fieldValues?: string[]): Promise { if (typeof sec === 'string' && typeof key === 'string' && fieldIndex && fieldValues instanceof Array) { const ruleRemoved = this.model.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); if (!ruleRemoved) { @@ -570,7 +565,7 @@ export class Enforcer { } if (this.adapter !== null && this.autoSave) { - this.adapter.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); + await this.adapter.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); if (this.watcher !== null) { // error intentionally ignored this.watcher.update(); @@ -579,7 +574,7 @@ export class Enforcer { return ruleRemoved; } else if (typeof sec === 'number' && key instanceof Array) { - return this.removeFilteredNamedPolicy('p', sec, key); + return await this.removeFilteredNamedPolicy('p', sec, key); } else { return false; } @@ -806,12 +801,12 @@ export class Enforcer { * @param params the "p" policy rule. * @return succeeds or not. */ - public addNamedPolicy(ptype: string, params: any[]): boolean { + public async addNamedPolicy(ptype: string, params: any[]): Promise { let ruleAdded = false; if (params.length === 1 && params[0] instanceof Array) { - ruleAdded = this.addPolicy('p', ptype, params[0]); + ruleAdded = await this.addPolicy('p', ptype, params[0]); } else { - ruleAdded = this.addPolicy('p', ptype, params); + ruleAdded = await this.addPolicy('p', ptype, params); } return ruleAdded; @@ -824,12 +819,12 @@ export class Enforcer { * @param params the "p" policy rule. * @return succeeds or not. */ - public removeNamedPolicy(ptype: string, params: any[]): boolean { + public async removeNamedPolicy(ptype: string, params: any[]): Promise { let ruleRemoved = false; if (params.length === 1 && params[0] instanceof Array) { - ruleRemoved = this.removePolicy('p', ptype, params[0]); + ruleRemoved = await this.removePolicy('p', ptype, params[0]); } else { - ruleRemoved = this.removePolicy('p', ptype, params); + ruleRemoved = await this.removePolicy('p', ptype, params); } return ruleRemoved; @@ -844,8 +839,8 @@ export class Enforcer { * means not to match this field. * @return succeeds or not. */ - public removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): boolean { - return this.removeFilteredPolicy('p', ptype, fieldIndex, fieldValues); + public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): Promise { + return await this.removeFilteredPolicy('p', ptype, fieldIndex, fieldValues); } /** @@ -880,8 +875,8 @@ export class Enforcer { * @param params the "g" policy rule, ptype "g" is implicitly used. * @return succeeds or not. */ - public addGroupingPolicy(...params: any[]): boolean { - return this.addNamedGroupingPolicy('g', params); + public async addGroupingPolicy(...params: any[]): Promise { + return await this.addNamedGroupingPolicy('g', params); } /** @@ -893,12 +888,12 @@ export class Enforcer { * @param params the "g" policy rule. * @return succeeds or not. */ - public addNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { + public async addNamedGroupingPolicy(ptype: string, ...params: any[]): Promise { let ruleadded = false; if (params.length === 1 && params[0] instanceof Array) { - ruleadded = this.addPolicy('g', ptype, params[0]); + ruleadded = await this.addPolicy('g', ptype, params[0]); } else { - ruleadded = this.addPolicy('g', ptype, params); + ruleadded = await this.addPolicy('g', ptype, params); } if (this.autoBuildRoleLinks) { @@ -914,8 +909,8 @@ export class Enforcer { * @param params the "g" policy rule, ptype "g" is implicitly used. * @return succeeds or not. */ - public removeGroupingPolicy(...params: any[]): boolean { - return this.removeNamedGroupingPolicy('g', params); + public async removeGroupingPolicy(...params: any[]): Promise { + return await this.removeNamedGroupingPolicy('g', params); } /** @@ -926,8 +921,8 @@ export class Enforcer { * means not to match this field. * @return succeeds or not. */ - public removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): boolean { - return this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + public async removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return await this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); } /** @@ -937,12 +932,12 @@ export class Enforcer { * @param params the "g" policy rule. * @return succeeds or not. */ - public removeNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { + public async removeNamedGroupingPolicy(ptype: string, ...params: any[]): Promise { let ruleRemoved = false; if (params.length === 1 && params[0] instanceof Array) { - ruleRemoved = this.removePolicy('g', ptype, params[0]); + ruleRemoved = await this.removePolicy('g', ptype, params[0]); } else { - ruleRemoved = this.removePolicy('g', ptype, params); + ruleRemoved = await this.removePolicy('g', ptype, params); } if (this.autoBuildRoleLinks) { @@ -960,8 +955,8 @@ export class Enforcer { * means not to match this field. * @return succeeds or not. */ - public removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): boolean { - const ruleRemoved = this.removeFilteredPolicy('g', ptype, fieldIndex, fieldValues); + public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + const ruleRemoved = await this.removeFilteredPolicy('g', ptype, fieldIndex, fieldValues); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); } @@ -1032,8 +1027,8 @@ export class Enforcer { * @param role the role. * @return succeeds or not. */ - public addRoleForUser(user: string, role: string): boolean { - return this.addGroupingPolicy(user, role); + public async addRoleForUser(user: string, role: string): Promise { + return await this.addGroupingPolicy(user, role); } /** @@ -1044,8 +1039,8 @@ export class Enforcer { * @param role the role. * @return succeeds or not. */ - public deleteRoleForUser(user: string, role: string): boolean { - return this.removeGroupingPolicy(user, role); + public async deleteRoleForUser(user: string, role: string): Promise { + return await this.removeGroupingPolicy(user, role); } /** @@ -1055,8 +1050,8 @@ export class Enforcer { * @param user the user. * @return succeeds or not. */ - public deleteRolesForUser(user: string): boolean { - return this.removeFilteredGroupingPolicy(0, user); + public async deleteRolesForUser(user: string): Promise { + return await this.removeFilteredGroupingPolicy(0, user); } /** @@ -1066,8 +1061,8 @@ export class Enforcer { * @param user the user. * @return succeeds or not. */ - public deleteUser(user: string): boolean { - return this.removeFilteredGroupingPolicy(0, user); + public async deleteUser(user: string): Promise { + return await this.removeFilteredGroupingPolicy(0, user); } /** @@ -1075,9 +1070,9 @@ export class Enforcer { * * @param role the role. */ - public deleteRole(role: string) { - this.removeFilteredGroupingPolicy(1, role); - this.removeFilteredPolicy(0, role); + public async deleteRole(role: string): Promise { + await this.removeFilteredGroupingPolicy(1, role); + await this.removeFilteredPolicy(0, role); } /** @@ -1087,8 +1082,8 @@ export class Enforcer { * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. * @return succeeds or not. */ - public deletePermission(...permission: string[]): boolean { - return this.removeFilteredPolicy(1, permission); + public async deletePermission(...permission: string[]): Promise { + return await this.removeFilteredPolicy(1, permission); } /** @@ -1099,9 +1094,9 @@ export class Enforcer { * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. * @return succeeds or not. */ - public addPermissionForUser(user: string, ...permission: string[]): boolean { + public async addPermissionForUser(user: string, ...permission: string[]): Promise { permission.unshift(user); - return this.addPolicy(permission); + return await this.addPolicy(permission); } /** @@ -1112,9 +1107,9 @@ export class Enforcer { * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. * @return succeeds or not. */ - public deletePermissionForUser(user: string, ...permission: string[]): boolean { + public async deletePermissionForUser(user: string, ...permission: string[]): Promise { permission.unshift(user); - return this.removePolicy(permission); + return await this.removePolicy(permission); } /** @@ -1124,8 +1119,8 @@ export class Enforcer { * @param user the user. * @return succeeds or not. */ - public deletePermissionsForUser(user: string): boolean { - return this.removeFilteredPolicy(0, user); + public async deletePermissionsForUser(user: string): Promise { + return await this.removeFilteredPolicy(0, user); } /** From 36d16ccb7a5c8522d48a52e3e300afd5ff14d5a7 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 10 Aug 2018 22:00:19 +0800 Subject: [PATCH 161/497] :white_check_mark: add initialize method of enforcer for test --- test/enforcer.test.ts | 8 +++++--- test/model.test.ts | 48 ++++++++++++++++++++++++++++--------------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 3fe45bfe..c18c04b1 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -19,7 +19,7 @@ function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: bo expect(e.enforce(sub, obj, act)).toBe(res); } -test('TestKeyMatchModelInMemory', () => { +test('TestKeyMatchModelInMemory', async () => { const m = Enforcer.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); @@ -29,6 +29,7 @@ test('TestKeyMatchModelInMemory', () => { const a = new FileAdapter('examples/keymatch_policy.csv'); let e = new Enforcer(m, a); + await e.initialize(); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -53,7 +54,7 @@ test('TestKeyMatchModelInMemory', () => { testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); e = new Enforcer(m); - a.loadPolicy(e.getModel()); + await e.initialize(); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -78,7 +79,7 @@ test('TestKeyMatchModelInMemory', () => { testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); }); -test('TestKeyMatchModelInMemoryDeny', () => { +test('TestKeyMatchModelInMemoryDeny', async () => { const m = Enforcer.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); @@ -88,6 +89,7 @@ test('TestKeyMatchModelInMemoryDeny', () => { const a = new FileAdapter('examples/keymatch_policy.csv'); const e = new Enforcer(m, a); + await e.initialize(); testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); }); diff --git a/test/model.test.ts b/test/model.test.ts index 2764b40c..0aa96434 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -27,8 +27,9 @@ function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, a expect(e.enforce(sub, dom, obj, act)).toBe(res); } -test('TestBasicModel', () => { +test('TestBasicModel', async () => { const e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -40,8 +41,9 @@ test('TestBasicModel', () => { testEnforce(e, 'bob', 'data2', 'write', true); }); -test('TestBasicModelNoPolicy', () => { +test('TestBasicModelNoPolicy', async () => { const e = new Enforcer('examples/basic_model.conf'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -53,8 +55,9 @@ test('TestBasicModelNoPolicy', () => { testEnforce(e, 'bob', 'data2', 'write', false); }); -test('TestBasicModelWithRoot', () => { +test('TestBasicModelWithRoot', async () => { const e = new Enforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -70,8 +73,9 @@ test('TestBasicModelWithRoot', () => { testEnforce(e, 'root', 'data2', 'write', true); }); -test('TestBasicModelWithRootNoPolicy', () => { +test('TestBasicModelWithRootNoPolicy', async () => { const e = new Enforcer('examples/basic_with_root_model.conf'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -87,8 +91,9 @@ test('TestBasicModelWithRootNoPolicy', () => { testEnforce(e, 'root', 'data2', 'write', true); }); -test('TestBasicModelWithoutUsers', () => { +test('TestBasicModelWithoutUsers', async () => { const e = new Enforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); + await e.initialize(); testEnforceWithoutUsers(e, 'data1', 'read', true); testEnforceWithoutUsers(e, 'data1', 'write', false); @@ -96,8 +101,9 @@ test('TestBasicModelWithoutUsers', () => { testEnforceWithoutUsers(e, 'data2', 'write', true); }); -test('TestBasicModelWithoutResources', () => { +test('TestBasicModelWithoutResources', async () => { const e = new Enforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); + await e.initialize(); testEnforceWithoutUsers(e, 'alice', 'read', true); testEnforceWithoutUsers(e, 'alice', 'write', false); @@ -105,8 +111,9 @@ test('TestBasicModelWithoutResources', () => { testEnforceWithoutUsers(e, 'bob', 'write', true); }); -test('TestRBACModel', () => { +test('TestRBACModel', async () => { const e = new Enforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -118,8 +125,9 @@ test('TestRBACModel', () => { testEnforce(e, 'bob', 'data2', 'write', true); }); -test('TestRBACModelWithResourceRoles', () => { +test('TestRBACModelWithResourceRoles', async () => { const e = new Enforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', true); @@ -131,8 +139,9 @@ test('TestRBACModelWithResourceRoles', () => { testEnforce(e, 'bob', 'data2', 'write', true); }); -test('TestRBACModelWithDomains', () => { +test('TestRBACModelWithDomains', async () => { const e = new Enforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + await e.initialize(); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); @@ -154,8 +163,9 @@ class TestResource { } } -test('TestABACModel', () => { +test('TestABACModel', async () => { const e = new Enforcer('examples/abac_model.conf'); + await e.initialize(); const data1 = new TestResource('data1', 'alice'); const data2 = new TestResource('data2', 'bob'); @@ -170,8 +180,9 @@ test('TestABACModel', () => { testEnforce(e, 'bob', data2, 'write', true); }); -test('TestKeyMatchModel', () => { +test('TestKeyMatchModel', async () => { const e = new Enforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -196,8 +207,9 @@ test('TestKeyMatchModel', () => { testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); }); -test('TestKeyMatch2Model', () => { +test('TestKeyMatch2Model', async () => { const e = new Enforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', '/alice_data', 'GET', false); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); @@ -222,8 +234,9 @@ function customFunctionWrapper(...args: any[]): boolean { return customFunction(name1, name2); } -test('TestKeyMatchCustomModel', () => { +test('TestKeyMatchCustomModel', async () => { const e = new Enforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); + await e.initialize(); e.addFunction('keyMatchCustom', customFunctionWrapper); @@ -231,8 +244,9 @@ test('TestKeyMatchCustomModel', () => { testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); }); -test('TestIPMatchModel', () => { +test('TestIPMatchModel', async () => { const e = new Enforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); + await e.initialize(); testEnforce(e, '192.168.2.123', 'data1', 'read', true); testEnforce(e, '192.168.2.123', 'data1', 'write', false); @@ -255,8 +269,9 @@ test('TestIPMatchModel', () => { testEnforce(e, '192.168.0.1', 'data2', 'write', false); }); -test('TestPriorityModel', () => { +test('TestPriorityModel', async () => { const e = new Enforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -268,8 +283,9 @@ test('TestPriorityModel', () => { testEnforce(e, 'bob', 'data2', 'write', false); }); -test('TestPriorityModelIndeterminate', () => { +test('TestPriorityModelIndeterminate', async () => { const e = new Enforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); + await e.initialize(); testEnforce(e, 'alice', 'data1', 'read', false); }); From 2df84ec9cc2e31ea3157a6ae91b7da12754a0e23 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 10 Aug 2018 22:00:52 +0800 Subject: [PATCH 162/497] :package: upgrade lodash module --- yarn.lock | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index 605b03be..f502a880 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2412,11 +2412,7 @@ lodash.sortby@^4.7.0: version "4.7.0" resolved "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" -lodash@^4.13.1, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.10" - resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" - -lodash@^4.17.10: +lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" From fa8ac70c5a3e1646b9d22fe1d471f57fbb16b52d Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Fri, 10 Aug 2018 22:05:10 +0800 Subject: [PATCH 163/497] :bug: fix if-else bug --- src/enforcer.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index d0c98ee6..91ad5303 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -138,7 +138,9 @@ export class Enforcer { this.enabled = true; this.autoSave = true; this.autoBuildRoleLinks = true; - await this.loadPolicy(); + if (this.adapter) { + await this.loadPolicy(); + } } /** From 85f490cfae2d0648865b2d736bf308a8ba1b4a2e Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sat, 11 Aug 2018 11:53:57 +0800 Subject: [PATCH 164/497] :art: rewrite writeFile util and savePolicy return --- src/persist/defaultFilteredAdapter.ts | 3 ++- src/util/util.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 54715f80..0f5e0e15 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -56,11 +56,12 @@ export class DefaultFilteredAdapter extends FileAdapter return this.filtered; } - public async savePolicy(model: Model): Promise { + public async savePolicy(model: Model): Promise { if (this.filtered) { throw new Error('cannot save a filtered policy'); } await super.savePolicy(model); + return true; } private static filterLine(line: string, filter: Filter): boolean { diff --git a/src/util/util.ts b/src/util/util.ts index c9435e9b..482e535d 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -74,11 +74,11 @@ function readFile(path: string, encoding?: string): any { // writeFile return a promise for writeFile. function writeFile(path: string, file: string, encoding?: string): any { return new Promise((resolve, reject) => { - fs.writeFile(path, file, encoding || 'utf8', (error, data) => { + fs.writeFile(path, file, encoding || 'utf8', (error) => { if (error) { reject(error); } - resolve(data); + resolve(true); }); }); } From 6861a27321565811a500e8cb512d29a7b2152da9 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 11 Aug 2018 14:05:07 +0800 Subject: [PATCH 165/497] v1.0.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9fbc63ee..a1392add 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.0.5", + "version": "1.0.6", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From 7758d43b2ef0be089c167717e5981b058165bc7f Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 11 Aug 2018 17:26:01 +0800 Subject: [PATCH 166/497] Add Koa to our adopters in README. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 292c9f08..9884b50f 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,10 @@ Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/mast ## Our adopters +### Web frameworks + +- [Koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) + ## License This project is licensed under the [Apache 2.0 license](https://github.com/casbin/node-casbin/blob/master/LICENSE). From 22fab2364e849571375dbf6a3bbcfd1dc084cd20 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 11 Aug 2018 18:46:58 +0800 Subject: [PATCH 167/497] Use newEnforcer instead of constructor and add promise support --- src/enforcer.ts | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 91ad5303..f54c44fc 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -40,8 +40,7 @@ export class Enforcer { private autoBuildRoleLinks: boolean; /** - * constructor is the constructor for Enforcer. - * It creates an enforcer via file or DB. + * newEnforcer creates an enforcer via file or DB. * * File: * ```js @@ -56,9 +55,10 @@ export class Enforcer { * * @param params */ - constructor(...params: any[]) { - this.rm = new DefaultRoleManager(10); - this.eft = new DefaultEffector(); + public static async newEnforcer(...params: any[]): Promise { + const e = new Enforcer(); + e.rm = new DefaultRoleManager(10); + e.eft = new DefaultEffector(); let parsedParamLen = 0; if (params.length >= 1) { @@ -72,28 +72,29 @@ export class Enforcer { if (params.length - parsedParamLen === 2) { if (typeof params[0] === 'string') { if (typeof params[1] === 'string') { - this.initWithFile(params[0].toString(), params[1].toString()); + await e.initWithFile(params[0].toString(), params[1].toString()); } else { - this.initWithAdapter(params[0].toString(), params[1]); + await e.initWithAdapter(params[0].toString(), params[1]); } } else { if (typeof params[1] === 'string') { throw new Error('Invalid parameters for enforcer.'); } else { - this.initWithModelAndAdapter(params[0], params[1]); + await e.initWithModelAndAdapter(params[0], params[1]); } } } else if (params.length - parsedParamLen === 1) { if (typeof params[0] === 'string') { - this.initWithFile(params[0], ''); + await e.initWithFile(params[0], ''); } else { - this.initWithModelAndAdapter(params[0], null); + await e.initWithModelAndAdapter(params[0], null); } } else if (params.length === parsedParamLen) { - this.initWithFile('', ''); + await e.initWithFile('', ''); } else { throw new Error('Invalid parameters for enforcer.'); } + return e; } /** @@ -101,9 +102,9 @@ export class Enforcer { * @param modelPath model file path * @param policyPath policy file path */ - public initWithFile(modelPath: string, policyPath: string): void { + public async initWithFile(modelPath: string, policyPath: string): Promise { const a = new FileAdapter(policyPath); - this.initWithAdapter(modelPath, a); + await this.initWithAdapter(modelPath, a); } /** @@ -111,9 +112,9 @@ export class Enforcer { * @param modelPath model file path * @param adapter current adapter instance */ - public initWithAdapter(modelPath: string, adapter: Adapter): void { + public async initWithAdapter(modelPath: string, adapter: Adapter): Promise { const m = Enforcer.newModel(modelPath, ''); - this.initWithModelAndAdapter(m, adapter); + await this.initWithModelAndAdapter(m, adapter); this.modelPath = modelPath; } @@ -123,7 +124,7 @@ export class Enforcer { * @param m model instance * @param adapter current adapter instance */ - public initWithModelAndAdapter(m: Model, adapter: Adapter | null): void { + public async initWithModelAndAdapter(m: Model, adapter: Adapter | null): Promise { if (adapter) { this.adapter = adapter; } @@ -132,15 +133,18 @@ export class Enforcer { this.model = m; this.model.printModel(); this.fm = FunctionMap.loadFunctionMap(); + this.initialize(); + + if (this.adapter) { + // error intentionally ignored + await this.loadPolicy(); + } } - public async initialize(): Promise { + public initialize(): void { this.enabled = true; this.autoSave = true; this.autoBuildRoleLinks = true; - if (this.adapter) { - await this.loadPolicy(); - } } /** From 0d7228d16fe5a4995dec7dc119705daba39a9281 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 11 Aug 2018 18:49:29 +0800 Subject: [PATCH 168/497] Use newEnforcer instead of new Enforcer --- test/enforcer.test.ts | 9 +++------ test/model.test.ts | 47 +++++++++++++++---------------------------- 2 files changed, 19 insertions(+), 37 deletions(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index c18c04b1..24141ab8 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -28,8 +28,7 @@ test('TestKeyMatchModelInMemory', async () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - let e = new Enforcer(m, a); - await e.initialize(); + let e = await Enforcer.newEnforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -53,8 +52,7 @@ test('TestKeyMatchModelInMemory', async () => { testEnforce(e, 'cathy', '/cathy_data', 'POST', true); testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); - e = new Enforcer(m); - await e.initialize(); + e = await Enforcer.newEnforcer(m); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -88,8 +86,7 @@ test('TestKeyMatchModelInMemoryDeny', async () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - const e = new Enforcer(m, a); - await e.initialize(); + const e = await Enforcer.newEnforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); }); diff --git a/test/model.test.ts b/test/model.test.ts index 0aa96434..1dbed1a6 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -28,8 +28,7 @@ function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, a } test('TestBasicModel', async () => { - const e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -42,8 +41,7 @@ test('TestBasicModel', async () => { }); test('TestBasicModelNoPolicy', async () => { - const e = new Enforcer('examples/basic_model.conf'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/basic_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -56,8 +54,7 @@ test('TestBasicModelNoPolicy', async () => { }); test('TestBasicModelWithRoot', async () => { - const e = new Enforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -74,8 +71,7 @@ test('TestBasicModelWithRoot', async () => { }); test('TestBasicModelWithRootNoPolicy', async () => { - const e = new Enforcer('examples/basic_with_root_model.conf'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/basic_with_root_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -92,8 +88,7 @@ test('TestBasicModelWithRootNoPolicy', async () => { }); test('TestBasicModelWithoutUsers', async () => { - const e = new Enforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); testEnforceWithoutUsers(e, 'data1', 'read', true); testEnforceWithoutUsers(e, 'data1', 'write', false); @@ -102,7 +97,7 @@ test('TestBasicModelWithoutUsers', async () => { }); test('TestBasicModelWithoutResources', async () => { - const e = new Enforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); + const e = await Enforcer.newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); await e.initialize(); testEnforceWithoutUsers(e, 'alice', 'read', true); @@ -112,8 +107,7 @@ test('TestBasicModelWithoutResources', async () => { }); test('TestRBACModel', async () => { - const e = new Enforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -126,8 +120,7 @@ test('TestRBACModel', async () => { }); test('TestRBACModelWithResourceRoles', async () => { - const e = new Enforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', true); @@ -140,8 +133,7 @@ test('TestRBACModelWithResourceRoles', async () => { }); test('TestRBACModelWithDomains', async () => { - const e = new Enforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); @@ -164,8 +156,7 @@ class TestResource { } test('TestABACModel', async () => { - const e = new Enforcer('examples/abac_model.conf'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/abac_model.conf'); const data1 = new TestResource('data1', 'alice'); const data2 = new TestResource('data2', 'bob'); @@ -181,8 +172,7 @@ test('TestABACModel', async () => { }); test('TestKeyMatchModel', async () => { - const e = new Enforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -208,8 +198,7 @@ test('TestKeyMatchModel', async () => { }); test('TestKeyMatch2Model', async () => { - const e = new Enforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); testEnforce(e, 'alice', '/alice_data', 'GET', false); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); @@ -235,8 +224,7 @@ function customFunctionWrapper(...args: any[]): boolean { } test('TestKeyMatchCustomModel', async () => { - const e = new Enforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); e.addFunction('keyMatchCustom', customFunctionWrapper); @@ -245,8 +233,7 @@ test('TestKeyMatchCustomModel', async () => { }); test('TestIPMatchModel', async () => { - const e = new Enforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); testEnforce(e, '192.168.2.123', 'data1', 'read', true); testEnforce(e, '192.168.2.123', 'data1', 'write', false); @@ -270,8 +257,7 @@ test('TestIPMatchModel', async () => { }); test('TestPriorityModel', async () => { - const e = new Enforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -284,8 +270,7 @@ test('TestPriorityModel', async () => { }); test('TestPriorityModelIndeterminate', async () => { - const e = new Enforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); - await e.initialize(); + const e = await Enforcer.newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', false); }); From c653e8ce2cc9e96abc4d4f01dc00795846de9267 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 11 Aug 2018 22:51:12 +0800 Subject: [PATCH 169/497] Adjust order and remove some content --- README.md | 92 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 9884b50f..ad4032ce 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,19 @@ node-casbin ==== - +[![NPM version][npm-image]][npm-url] +[![NPM download][download-image]][download-url] [![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) [![Build Status](https://travis-ci.org/casbin/node-casbin.svg?branch=master)](https://travis-ci.org/casbin/node-casbin) [![Coverage Status](https://coveralls.io/repos/github/casbin/node-casbin/badge.svg?branch=master)](https://coveralls.io/github/casbin/node-casbin?branch=master) [![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) [![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](http://www.patreon.com/yangluo) -[![Sourcegraph Badge](https://sourcegraph.com/github.com/casbin/casbin/-/badge.svg)](https://sourcegraph.com/github.com/casbin/casbin?badge) +[![Sourcegraph Badge](https://sourcegraph.com/github.com/casbin/node-casbin/-/badge.svg)](https://sourcegraph.com/github.com/casbin/node-casbin?badge) + +[npm-image]: https://img.shields.io/npm/v/casbin.svg?style=flat-square +[npm-url]: https://npmjs.org/package/casbin +[download-image]: https://img.shields.io/npm/dm/casbin.svg?style=flat-square +[download-url]: https://npmjs.org/package/casbin **News**: still worry about how to write the correct node-casbin policy? ``Casbin online editor`` is coming to help! Try it at: http://casbin.org/editor/ @@ -15,6 +21,46 @@ node-casbin node-casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). +## Installation + +``` +npm install casbin --save +``` + +## Get started + +1. New a node-casbin enforcer with a model file and a policy file: + + ```typescript + const enforcer = await Enforcer.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); + ``` + +Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#persistence) section for details. + +2. Add an enforcement hook into your code right before the access happens: + + ```typescript + const sub = 'alice'; // the user that wants to access a resource. + const obj = 'data1'; // the resource that is going to be accessed. + const act = 'read'; // the operation that the user performs on the resource. + + if (enforcer.enforce(sub, obj, act) == true) { + // permit alice to read data1 + } else { + // deny the request, show an error + } + ``` + +3. Besides the static policy file, node-casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: + + ```typescript + const roles = enforcer.getRoles('alice'); + ``` + +See [Policy management APIs](#policy-management) for more usage. + +4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. + ## All the languages supported by Casbin: - Golang: [Casbin](https://github.com/casbin/casbin) (production-ready) @@ -28,11 +74,9 @@ node-casbin is a powerful and efficient open-source access control library for N - [Supported models](#supported-models) - [How it works?](#how-it-works) - [Features](#features) -- [Installation](#installation) - [Documentation](#documentation) - [Online editor](#online-editor) - [Tutorials](#tutorials) -- [Get started](#get-started) - [Policy management](#policy-management) - [Policy persistence](#policy-persistence) - [Role manager](#role-manager) @@ -104,12 +148,6 @@ What node-casbin does NOT do: 1. authentication (aka verify ``username`` and ``password`` when a user logs in) 2. manage the list of users or roles. I believe it's more convenient for the project itself to manage these entities. Users usually have their passwords, and node-casbin is not designed as a password container. However, node-casbin stores the user-role mapping for the RBAC scenario. -## Installation - -``` -npm install casbin -``` - ## Documentation For documentation, please see: [Our Wiki](https://github.com/casbin/casbin/wiki) @@ -125,40 +163,6 @@ You can also use the online editor (http://casbin.org/editor/) to write your nod - [Using Casbin with Beego: 2. Policy storage (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78571240) - [Using Casbin with Beego: 3. Policy query (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78992250) -## Get started - -1. New a node-casbin enforcer with a model file and a policy file: - - ```typescript - const enforcer = new Enforcer('path/to/model.conf', 'path/to/policy.csv'); - ``` - -Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#persistence) section for details. - -2. Add an enforcement hook into your code right before the access happens: - - ```typescript - const sub = 'alice'; // the user that wants to access a resource. - const obj = 'data1'; // the resource that is going to be accessed. - const act = 'read'; // the operation that the user performs on the resource. - - if (enforcer.enforce(sub, obj, act) == true) { - // permit alice to read data1 - } else { - // deny the request, show an error - } - ``` - -3. Besides the static policy file, node-casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: - - ```typescript - const roles = enforcer.getRoles('alice'); - ``` - -See [Policy management APIs](#policy-management) for more usage. - -4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. - ## Policy management node-casbin provides two sets of APIs to manage permissions: From 709c481e77a327b4c5d3c1995edfc2a244fed792 Mon Sep 17 00:00:00 2001 From: nodece Date: Sun, 12 Aug 2018 23:39:04 +0800 Subject: [PATCH 170/497] v1.0.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1392add..7d54f03b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.0.6", + "version": "1.0.7", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From 8dd3350fd9a49152ca2a098e132d6ddb4bd79ddd Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 14 Aug 2018 09:53:29 +0800 Subject: [PATCH 171/497] Add express and egg to our adopters in README. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ad4032ce..fe476f0b 100644 --- a/README.md +++ b/README.md @@ -217,7 +217,9 @@ Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/mast ### Web frameworks -- [Koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) +- [koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) +- [express](https://github.com/expressjs/express): Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) +- [egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa , via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) ## License From cea4ea97cf22c0f3cf712593af5d37fd145103db Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 16 Aug 2018 22:08:24 +0800 Subject: [PATCH 172/497] Add export util --- src/casbin.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/casbin.ts b/src/casbin.ts index cd360b03..02b6a33b 100644 --- a/src/casbin.ts +++ b/src/casbin.ts @@ -2,3 +2,4 @@ export * from './enforcer'; export * from './effect'; export * from './persist'; export * from './rbac'; +export * from './util'; From 0da69ea55d2870910a3e8dbc2ac1e66e9fbe497d Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 16 Aug 2018 22:09:33 +0800 Subject: [PATCH 173/497] v1.0.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d54f03b..bb68f6c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.0.7", + "version": "1.0.8", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From 03ee554ef55c04ac001665d7380814fbc9908651 Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 16 Aug 2018 22:38:33 +0800 Subject: [PATCH 174/497] Update export util --- src/casbin.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/casbin.ts b/src/casbin.ts index 02b6a33b..702b62b9 100644 --- a/src/casbin.ts +++ b/src/casbin.ts @@ -2,4 +2,5 @@ export * from './enforcer'; export * from './effect'; export * from './persist'; export * from './rbac'; -export * from './util'; +import * as Util from './util'; +export {Util}; From 7304d7eb74c4aecc8f64195bac17ba1187ae796d Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 16 Aug 2018 22:39:55 +0800 Subject: [PATCH 175/497] v1.0.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb68f6c2..b29c38a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.0.8", + "version": "1.0.9", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From a6d9d82f99fb5a704c372e7194901933c825615b Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 17 Aug 2018 13:16:41 +0800 Subject: [PATCH 176/497] Export model. --- src/casbin.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/casbin.ts b/src/casbin.ts index 702b62b9..c408b0dc 100644 --- a/src/casbin.ts +++ b/src/casbin.ts @@ -1,5 +1,6 @@ export * from './enforcer'; export * from './effect'; +export * from './model'; export * from './persist'; export * from './rbac'; import * as Util from './util'; From ffb6831db178513ff3602d0db00f4a1154a59441 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 17 Aug 2018 13:19:03 +0800 Subject: [PATCH 177/497] Remove individual sensitive information in test. --- test/util.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/util.test.ts b/test/util.test.ts index e6556c79..6069654a 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -69,7 +69,7 @@ test('test ipMatchFunc', () => { expect(util.ipMatchFunc('127.0.0.1', '::ffff:127.0.0.1')).toEqual(true); expect(util.ipMatchFunc('192.168.2.123', '192.168.2.0/24')).toEqual(true); expect(util.ipMatchFunc('::1', '127.0.0.2')).toEqual(false); - expect(() => util.ipMatchFunc('i am chaplin', '127.0.0.1')).toThrow(Error); - expect(() => util.ipMatchFunc('127.0.0.1', 'i am chaplin')).toThrow(/invalid/g); + expect(() => util.ipMatchFunc('I am alice', '127.0.0.1')).toThrow(Error); + expect(() => util.ipMatchFunc('127.0.0.1', 'I am alice')).toThrow(/invalid/g); expect(util.ipMatchFunc('192.168.2.189', '192.168.1.134/26')).toEqual(false); }); From b84f789db922fcf2819fb08e7bd1541b7123ff96 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 17 Aug 2018 13:49:45 +0800 Subject: [PATCH 178/497] Bump to v1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b29c38a0..249ac71e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.0.9", + "version": "1.1.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From e94948b5f912ed3e1c79d793b0ab536e658ae790 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 19 Aug 2018 11:57:49 +0800 Subject: [PATCH 179/497] Improve the LICENSE of README. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fe476f0b..cf3cde4f 100644 --- a/README.md +++ b/README.md @@ -223,11 +223,11 @@ Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/mast ## License -This project is licensed under the [Apache 2.0 license](https://github.com/casbin/node-casbin/blob/master/LICENSE). +This project is licensed under the [Apache 2.0 license](LICENSE). ## Contact If you have any issues or feature requests, please contact us. PR is welcomed. - https://github.com/casbin/node-casbin/issues - hsluoyz@gmail.com -- Tencent QQ group: [546057381](//shang.qq.com/wpa/qunwpa?idkey=8ac8b91fc97ace3d383d0035f7aa06f7d670fd8e8d4837347354a31c18fac885) \ No newline at end of file +- Tencent QQ group: [546057381](//shang.qq.com/wpa/qunwpa?idkey=8ac8b91fc97ace3d383d0035f7aa06f7d670fd8e8d4837347354a31c18fac885) From aeb804f25fff6384c2d0e55624707230a172c3a5 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 19 Aug 2018 12:32:40 +0800 Subject: [PATCH 180/497] Ignore npm & yarn lock files. --- .gitignore | 3 + yarn.lock | 3919 ---------------------------------------------------- 2 files changed, 3 insertions(+), 3919 deletions(-) delete mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 4e18e7ca..b3371e8e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ node_modules lib yarn-error.log + +package-lock.json +yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index f502a880..00000000 --- a/yarn.lock +++ /dev/null @@ -1,3919 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.55" - resolved "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.55.tgz#71f530e7b010af5eb7a7df7752f78921dd57e9ee" - dependencies: - "@babel/highlight" "7.0.0-beta.55" - -"@babel/highlight@7.0.0-beta.55": - version "7.0.0-beta.55" - resolved "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.55.tgz#988653647d629c261dae156e74d5f0252ba520c0" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "http://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - dependencies: - any-observable "^0.3.0" - -"@types/ip@^0.0.31": - version "0.0.31" - resolved "http://registry.npm.taobao.org/@types/ip/download/@types/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" - dependencies: - "@types/node" "*" - -"@types/jest@^23.3.1": - version "23.3.1" - resolved "http://registry.npm.taobao.org/@types/jest/download/@types/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf" - -"@types/lodash@^4.14.113": - version "4.14.113" - resolved "http://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.113.tgz#1d1cb063f17fec4cc46f1a90d978ebf441113061" - -"@types/node@*": - version "10.5.2" - resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707" - -"@types/node@^10.5.3": - version "10.5.3" - resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.5.3.tgz#5bcfaf088ad17894232012877669634c06b20cc5" - -abab@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/abab/download/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - -abab@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/abab/download/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - -abbrev@1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -acorn-globals@^4.1.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" - dependencies: - acorn "^5.0.0" - -acorn@^5.0.0, acorn@^5.5.3: - version "5.7.1" - resolved "http://registry.npm.taobao.org/acorn/download/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" - -ajv@^5.1.0: - version "5.5.2" - resolved "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - -anymatch@^1.3.0: - version "1.3.2" - resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -app-root-path@^2.0.1: - version "2.1.0" - resolved "http://registry.npm.taobao.org/app-root-path/download/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" - -append-transform@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/append-transform/download/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - dependencies: - default-require-extensions "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-equal@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-filter@~0.0.0: - version "0.0.1" - resolved "http://registry.npm.taobao.org/array-filter/download/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "http://registry.npm.taobao.org/array-map/download/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-unique@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -array-unique@^0.3.2: - version "0.3.2" - resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -arrify@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1@~0.2.3: - version "0.2.3" - resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - -async-each@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async@^1.4.0: - version "1.5.2" - resolved "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4: - version "2.6.1" - resolved "http://registry.npm.taobao.org/async/download/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/atob/download/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.6.0: - version "1.7.0" - resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3: - version "6.26.3" - resolved "http://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "http://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/babel-jest/download/babel-jest-23.4.2.tgz#f276de67798a5d68f2d6e87ff518c2f6e1609877" - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "http://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^22.4.4: - version "22.4.4" - resolved "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" - -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-transform-es2015-modules-commonjs@^6.26.2: - version "6.26.2" - resolved "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "http://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-jest@^22.4.3: - version "22.4.4" - resolved "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" - dependencies: - babel-plugin-jest-hoist "^22.4.4" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" - dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base@^0.11.1: - version "0.11.2" - resolved "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1: - version "2.3.2" - resolved "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -browser-process-hrtime@^0.1.2: - version "0.1.2" - resolved "http://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" - -browser-resolve@^1.11.2, browser-resolve@^1.11.3: - version "1.11.3" - resolved "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - dependencies: - resolve "1.1.7" - -bser@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/bser/download/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" - -builtin-modules@^1.0.0, builtin-modules@^1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -cache-base@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase@^1.0.2: - version "1.2.1" - resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^4.1.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -capture-exit@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/capture-exit/download/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - dependencies: - rsvp "^3.3.3" - -caseless@~0.12.0: - version "0.12.0" - resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: - version "2.4.1" - resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chokidar@^1.6.0: - version "1.7.0" - resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chownr@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/chownr/download/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -ci-info@^1.0.0: - version "1.1.3" - resolved "http://registry.npm.taobao.org/ci-info/download/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" - -class-utils@^0.3.5: - version "0.3.6" - resolved "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-spinners@^0.1.2: - version "0.1.2" - resolved "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/cli-truncate/download/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cliui@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^4.0.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.2" - resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" - dependencies: - color-name "1.1.1" - -color-name@1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" - -combined-stream@1.0.6, combined-stream@~1.0.5: - version "1.0.6" - resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: - version "2.16.0" - resolved "http://registry.npm.taobao.org/commander/download/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" - -compare-versions@^3.1.0: - version "3.3.0" - resolved "http://registry.npm.taobao.org/compare-versions/download/compare-versions-3.3.0.tgz#af93ea705a96943f622ab309578b9b90586f39c3" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -concat-map@0.0.1: - version "0.0.1" - resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -convert-source-map@^1.4.0, convert-source-map@^1.5.1: - version "1.5.1" - resolved "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.7" - resolved "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@^5.0.2: - version "5.0.5" - resolved "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - -coveralls@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.2.tgz#f5a0bcd90ca4e64e088b710fa8dda640aea4884f" - dependencies: - growl "~> 1.10.0" - js-yaml "^3.11.0" - lcov-parse "^0.0.10" - log-driver "^1.2.7" - minimist "^1.2.0" - request "^2.85.0" - -cpx@^1.5.0: - version "1.5.0" - resolved "http://registry.npm.taobao.org/cpx/download/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" - dependencies: - babel-runtime "^6.9.2" - chokidar "^1.6.0" - duplexer "^0.1.1" - glob "^7.0.5" - glob2base "^0.0.12" - minimatch "^3.0.2" - mkdirp "^0.5.1" - resolve "^1.1.7" - safe-buffer "^5.0.1" - shell-quote "^1.6.1" - subarg "^1.0.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.4" - resolved "http://registry.npm.taobao.org/cssom/download/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" - -cssstyle@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/cssstyle/download/cssstyle-1.0.0.tgz#79b16d51ec5591faec60e688891f15d2a5705129" - dependencies: - cssom "0.3.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/data-urls/download/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" - dependencies: - abab "^1.0.4" - whatwg-mimetype "^2.0.0" - whatwg-url "^6.4.0" - -date-fns@^1.27.2: - version "1.29.0" - resolved "http://registry.npm.taobao.org/date-fns/download/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.1.0" - resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0, decamelize@^1.1.1: - version "1.2.0" - resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -dedent@^0.7.0: - version "0.7.0" - resolved "http://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -deep-is@~0.1.3: - version "0.1.3" - resolved "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - dependencies: - strip-bom "^3.0.0" - -define-properties@^1.1.2: - version "1.1.2" - resolved "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -define-property@^0.2.5: - version "0.2.5" - resolved "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "http://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-newline@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - -diff@^3.2.0: - version "3.5.0" - resolved "http://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - -domexception@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - dependencies: - webidl-conversions "^4.0.2" - -duplexer@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.5.1: - version "1.12.0" - resolved "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.9.1: - version "1.11.0" - resolved "http://registry.npm.taobao.org/escodegen/download/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -esprima@^3.1.3: - version "3.1.3" - resolved "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.1" - resolved "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -estraverse@^4.2.0: - version "4.2.0" - resolved "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "http://registry.npm.taobao.org/exec-sh/download/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - dependencies: - merge "^1.2.0" - -execa@^0.7.0: - version "0.7.0" - resolved "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.9.0: - version "0.9.0" - resolved "http://registry.npm.taobao.org/execa/download/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/exit-hook/download/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -exit@^0.1.2: - version "0.1.2" - resolved "http://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -expect@^22.4.0: - version "22.4.3" - resolved "http://registry.npm.taobao.org/expect/download/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.4.3" - jest-get-type "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - -expect@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/expect/download/expect-23.4.0.tgz#6da4ecc99c1471253e7288338983ad1ebadb60c3" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^23.2.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.2.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - -expression-eval@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/expression-eval/download/expression-eval-1.3.0.tgz#995fd072d66087d543ae6c7f1f622393c8a74794" - dependencies: - jsep "^0.3.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.1: - version "3.0.2" - resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -extglob@^0.3.1: - version "0.3.2" - resolved "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -figures@^1.7.0: - version "1.7.0" - resolved "http://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fileset@^2.0.2: - version "2.0.3" - resolved "http://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^2.1.0: - version "2.2.4" - resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-index@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/find-index/download/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/find-parent-dir/download/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -find-up@^1.0.0: - version "1.1.2" - resolved "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "http://registry.npm.taobao.org/foreach/download/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.3.1: - version "2.3.2" - resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -fs-extra@6.0.0: - version "6.0.0" - resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-6.0.0.tgz#0f0afb290bb3deb87978da816fcd3c7797f3a817" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "http://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0, fsevents@^1.2.3: - version "1.2.4" - resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -gauge@~2.7.3: - version "2.7.4" - resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - -get-own-enumerable-property-symbols@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" - -get-stream@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob2base@^0.0.12: - version "0.0.12" - resolved "http://registry.npm.taobao.org/glob2base/download/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" - dependencies: - find-index "^0.1.1" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.18.0: - version "9.18.0" - resolved "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"growl@~> 1.10.0": - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - -growly@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -handlebars@^4.0.3: - version "4.0.11" - resolved "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-schema@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~5.0.3: - version "5.0.3" - resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1: - version "1.0.3" - resolved "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - -http-signature@~1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -husky@^0.14.3: - version "0.14.3" - resolved "http://registry.npm.taobao.org/husky/download/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" - dependencies: - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@^0.4.4: - version "0.4.23" - resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -import-local@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indent-string@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - -inflight@^1.0.4: - version "1.0.6" - resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@~1.3.0: - version "1.3.5" - resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -invariant@^2.2.2: - version "2.2.4" - resolved "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.4" - resolved "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-ci@^1.0.10: - version "1.1.0" - resolved "http://registry.npm.taobao.org/is-ci/download/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "http://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-generator-fn/download/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-number@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - -is-obj@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-observable@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/is-observable/download/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - dependencies: - symbol-observable "^1.1.0" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-stream@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isstream@~0.1.2: - version "0.1.2" - resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.3.1: - version "1.3.1" - resolved "http://registry.npm.taobao.org/istanbul-api/download/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" - dependencies: - async "^2.1.4" - compare-versions "^3.1.0" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-hook "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" - -istanbul-lib-hook@^1.2.0: - version "1.2.1" - resolved "http://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" - dependencies: - append-transform "^1.0.0" - -istanbul-lib-instrument@^1.10.1: - version "1.10.1" - resolved "http://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.0" - semver "^5.3.0" - -istanbul-lib-report@^1.1.4: - version "1.1.4" - resolved "http://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" - dependencies: - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.4: - version "1.2.5" - resolved "http://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" - dependencies: - throat "^4.0.0" - -jest-cli@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-cli/download/jest-cli-23.4.2.tgz#49d56bcfe6cf01871bfcc4a0494e08edaf2b61d0" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.3.1" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-source-maps "^1.2.4" - jest-changed-files "^23.4.2" - jest-config "^23.4.2" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.4.1" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.4.2" - jest-runner "^23.4.2" - jest-runtime "^23.4.2" - jest-snapshot "^23.4.2" - jest-util "^23.4.0" - jest-validate "^23.4.0" - jest-watcher "^23.4.0" - jest-worker "^23.2.0" - micromatch "^2.3.11" - node-notifier "^5.2.1" - prompts "^0.1.9" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^11.0.0" - -jest-config@^22.4.3, jest-config@^22.4.4: - version "22.4.4" - resolved "http://registry.npm.taobao.org/jest-config/download/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a" - dependencies: - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^22.4.1" - jest-environment-node "^22.4.1" - jest-get-type "^22.1.0" - jest-jasmine2 "^22.4.4" - jest-regex-util "^22.1.0" - jest-resolve "^22.4.2" - jest-util "^22.4.1" - jest-validate "^22.4.4" - pretty-format "^22.4.0" - -jest-config@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-config/download/jest-config-23.4.2.tgz#62a105e14b8266458f2bf4d32403b2c44418fa77" - dependencies: - babel-core "^6.0.0" - babel-jest "^23.4.2" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.4.2" - jest-regex-util "^23.3.0" - jest-resolve "^23.4.1" - jest-util "^23.4.0" - jest-validate "^23.4.0" - pretty-format "^23.2.0" - -jest-diff@^22.4.0, jest-diff@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-diff/download/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" - -jest-diff@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/jest-diff/download/jest-diff-23.2.0.tgz#9f2cf4b51e12c791550200abc16b47130af1062a" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.2.0" - -jest-docblock@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/jest-docblock/download/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - dependencies: - detect-newline "^2.1.0" - -jest-each@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/jest-each/download/jest-each-23.4.0.tgz#2fa9edd89daa1a4edc9ff9bf6062a36b71345143" - dependencies: - chalk "^2.0.1" - pretty-format "^23.2.0" - -jest-environment-jsdom@^22.4.1: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - jsdom "^11.5.1" - -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - jsdom "^11.5.1" - -jest-environment-node@^22.4.1: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - -jest-get-type@^22.1.0, jest-get-type@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-get-type/download/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - -jest-haste-map@^23.4.1: - version "23.4.1" - resolved "http://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-23.4.1.tgz#43a174ba7ac079ae1dd74eaf5a5fe78989474dd2" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^22.4.4: - version "22.4.4" - resolved "http://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23" - dependencies: - chalk "^2.0.1" - co "^4.6.0" - expect "^22.4.0" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.4.0" - jest-matcher-utils "^22.4.0" - jest-message-util "^22.4.0" - jest-snapshot "^22.4.0" - jest-util "^22.4.1" - source-map-support "^0.5.0" - -jest-jasmine2@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-23.4.2.tgz#2fbf52f93e43ed4c5e7326a90bb1d785be4321ac" - dependencies: - babel-traverse "^6.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^23.4.0" - is-generator-fn "^1.0.0" - jest-diff "^23.2.0" - jest-each "^23.4.0" - jest-matcher-utils "^23.2.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.4.2" - jest-util "^23.4.0" - pretty-format "^23.2.0" - -jest-leak-detector@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-23.2.0.tgz#c289d961dc638f14357d4ef96e0431ecc1aa377d" - dependencies: - pretty-format "^23.2.0" - -jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" - -jest-matcher-utils@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-23.2.0.tgz#4d4981f23213e939e3cedf23dc34c747b5ae1913" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.2.0" - -jest-message-util@^22.4.0, jest-message-util@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-message-util/download/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-message-util@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/jest-message-util/download/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-mock@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-mock/download/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" - -jest-mock@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/jest-mock/download/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" - -jest-regex-util@^22.1.0, jest-regex-util@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" - -jest-regex-util@^23.3.0: - version "23.3.0" - resolved "http://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" - -jest-resolve-dependencies@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-23.4.2.tgz#0675ba876a5b819deffc449ad72e9985c2592048" - dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.4.2" - -jest-resolve@^22.4.2: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-resolve/download/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" - dependencies: - browser-resolve "^1.11.2" - chalk "^2.0.1" - -jest-resolve@^23.4.1: - version "23.4.1" - resolved "http://registry.npm.taobao.org/jest-resolve/download/jest-resolve-23.4.1.tgz#7f3c17104732a2c0c940a01256025ed745814982" - dependencies: - browser-resolve "^1.11.3" - chalk "^2.0.1" - realpath-native "^1.0.0" - -jest-runner@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-runner/download/jest-runner-23.4.2.tgz#579a88524ac52c846075b0129a21c7b483e75a7e" - dependencies: - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.4.2" - jest-docblock "^23.2.0" - jest-haste-map "^23.4.1" - jest-jasmine2 "^23.4.2" - jest-leak-detector "^23.2.0" - jest-message-util "^23.4.0" - jest-runtime "^23.4.2" - jest-util "^23.4.0" - jest-worker "^23.2.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-runtime/download/jest-runtime-23.4.2.tgz#00c3bb8385253d401a394a27d1112d3615e5a65c" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.4.2" - jest-haste-map "^23.4.1" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.4.1" - jest-snapshot "^23.4.2" - jest-util "^23.4.0" - jest-validate "^23.4.0" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^11.0.0" - -jest-serializer@^23.0.1: - version "23.0.1" - resolved "http://registry.npm.taobao.org/jest-serializer/download/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" - -jest-snapshot@^22.4.0: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" - dependencies: - chalk "^2.0.1" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^22.4.3" - -jest-snapshot@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-23.4.2.tgz#8fa6130feb5a527dac73e5fa80d86f29f7c42ab6" - dependencies: - babel-types "^6.0.0" - chalk "^2.0.1" - jest-diff "^23.2.0" - jest-matcher-utils "^23.2.0" - jest-message-util "^23.4.0" - jest-resolve "^23.4.1" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^23.2.0" - semver "^5.5.0" - -jest-util@^22.4.1, jest-util@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/jest-util/download/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.4.3" - mkdirp "^0.5.1" - source-map "^0.6.0" - -jest-util@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/jest-util/download/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" - mkdirp "^0.5.1" - slash "^1.0.0" - source-map "^0.6.0" - -jest-validate@^22.4.4: - version "22.4.4" - resolved "http://registry.npm.taobao.org/jest-validate/download/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d" - dependencies: - chalk "^2.0.1" - jest-config "^22.4.4" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^22.4.0" - -jest-validate@^23.0.0, jest-validate@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/jest-validate/download/jest-validate-23.4.0.tgz#d96eede01ef03ac909c009e9c8e455197d48c201" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.2.0" - -jest-watcher@^23.4.0: - version "23.4.0" - resolved "http://registry.npm.taobao.org/jest-watcher/download/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - string-length "^2.0.0" - -jest-worker@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/jest-worker/download/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" - dependencies: - merge-stream "^1.0.1" - -jest@^23.4.2: - version "23.4.2" - resolved "http://registry.npm.taobao.org/jest/download/jest-23.4.2.tgz#1fae3ed832192143070ae85156b25cea891a1260" - dependencies: - import-local "^1.0.0" - jest-cli "^23.4.2" - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - -js-yaml@^3.11.0, js-yaml@^3.7.0, js-yaml@^3.9.0: - version "3.12.0" - resolved "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@^11.5.1: - version "11.12.0" - resolved "http://registry.npm.taobao.org/jsdom/download/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsep@^0.3.0: - version "0.3.4" - resolved "http://registry.npm.taobao.org/jsep/download/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema@0.2.3: - version "0.2.3" - resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json5@^0.5.1: - version "0.5.1" - resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -kleur@^2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/kleur/download/kleur-2.0.1.tgz#7cc64b0d188d0dcbc98bdcdfdda2cc10619ddce8" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -lcov-parse@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - -left-pad@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/left-pad/download/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - -leven@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@~0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^7.2.0: - version "7.2.0" - resolved "http://registry.npm.taobao.org/lint-staged/download/lint-staged-7.2.0.tgz#bdf4bb7f2f37fe689acfaec9999db288a5b26888" - dependencies: - app-root-path "^2.0.1" - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.0.2" - debug "^3.1.0" - dedent "^0.7.0" - execa "^0.9.0" - find-parent-dir "^0.3.0" - is-glob "^4.0.0" - is-windows "^1.0.2" - jest-validate "^23.0.0" - listr "^0.14.1" - lodash "^4.17.5" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.1" - string-argv "^0.0.2" - stringify-object "^3.2.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/listr-silent-renderer/download/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.4.0: - version "0.4.0" - resolved "http://registry.npm.taobao.org/listr-update-renderer/download/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.4.0: - version "0.4.1" - resolved "http://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -listr@^0.14.1: - version "0.14.1" - resolved "http://registry.npm.taobao.org/listr/download/listr-0.14.1.tgz#8a7afa4a7135cee4c921d128e0b7dfc6e522d43d" - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.4.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^6.1.0" - strip-ansi "^3.0.1" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - -lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" - -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-symbols@^2.2.0: - version "2.2.0" - resolved "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -log-update@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/log-update/download/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - -longest@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^4.0.1: - version "4.1.3" - resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -makeerror@1.0.x: - version "1.0.11" - resolved "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-visit@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -math-random@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/math-random/download/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -mem@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/merge-stream/download/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - dependencies: - readable-stream "^2.0.1" - -merge@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/merge/download/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mime-db@~1.35.0: - version "1.35.0" - resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" - -mime-types@^2.1.12, mime-types@~2.1.17: - version "2.1.19" - resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" - dependencies: - mime-db "~1.35.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: - version "3.0.4" - resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.3" - resolved "http://registry.npm.taobao.org/minipass/download/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/minizlib/download/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -nan@^2.9.2: - version "2.10.0" - resolved "http://registry.npm.taobao.org/nan/download/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -needle@^2.2.1: - version "2.2.1" - resolved "http://registry.npm.taobao.org/needle/download/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -node-int64@^0.4.0: - version "0.4.0" - resolved "http://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-notifier@^5.2.1: - version "5.2.1" - resolved "http://registry.npm.taobao.org/node-notifier/download/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" - dependencies: - growly "^1.3.0" - semver "^5.4.1" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -nopt@^4.0.1: - version "4.0.1" - resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2: - version "2.4.0" - resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npm-bundled@^1.0.1: - version "1.0.3" - resolved "http://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" - -npm-packlist@^1.1.6: - version "1.1.11" - resolved "http://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-path@^2.0.2: - version "2.0.4" - resolved "http://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/npm-which/download/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -npmlog@^4.0.2: - version "4.1.2" - resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -nwsapi@^2.0.7: - version "2.0.7" - resolved "http://registry.npm.taobao.org/nwsapi/download/nwsapi-2.0.7.tgz#6fc54c254621f10cac5225b76e81c74120139b78" - -oauth-sign@~0.8.2: - version "0.8.2" - resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-copy@^0.1.0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.8: - version "1.0.12" - resolved "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-visit@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -optimist@^0.6.1: - version "0.6.1" - resolved "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -ora@^0.2.3: - version "0.2.3" - resolved "http://registry.npm.taobao.org/ora/download/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - -p-try@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse5@4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-exists@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5: - version "1.0.5" - resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-type@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -performance-now@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^2.0.0: - version "2.3.0" - resolved "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -please-upgrade-node@^3.0.2: - version "3.1.1" - resolved "http://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - dependencies: - semver-compare "^1.0.0" - -pn@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -pretty-format@^22.4.0, pretty-format@^22.4.3: - version "22.4.3" - resolved "http://registry.npm.taobao.org/pretty-format/download/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-format@^23.2.0: - version "23.2.0" - resolved "http://registry.npm.taobao.org/pretty-format/download/pretty-format-23.2.0.tgz#3b0aaa63c018a53583373c1cb3a5d96cc5e83017" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -private@^0.1.8: - version "0.1.8" - resolved "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -prompts@^0.1.9: - version "0.1.13" - resolved "http://registry.npm.taobao.org/prompts/download/prompts-0.1.13.tgz#7fad7ee1c6cafe49834ca0b2a6a471262de57620" - dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -psl@^1.1.24: - version "1.1.28" - resolved "http://registry.npm.taobao.org/psl/download/psl-1.1.28.tgz#4fb6ceb08a1e2214d4fd4de0ca22dae13740bc7b" - -punycode@^1.4.1: - version "1.4.1" - resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.1" - resolved "http://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -qs@~6.5.1: - version "6.5.2" - resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -randomatic@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/randomatic/download/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -rc@^1.2.7: - version "1.2.8" - resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6: - version "2.3.6" - resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -realpath-native@^1.0.0: - version "1.0.1" - resolved "http://registry.npm.taobao.org/realpath-native/download/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633" - dependencies: - util.promisify "^1.0.0" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request-promise-core@1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" - dependencies: - lodash "^4.13.1" - -request-promise-native@^1.0.5: - version "1.0.5" - resolved "http://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@^2.85.0, request@^2.87.0: - version "2.87.0" - resolved "http://registry.npm.taobao.org/request/download/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.7: - version "1.1.7" - resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.7, resolve@^1.3.2: - version "1.8.1" - resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -ret@~0.1.10: - version "0.1.15" - resolved "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -right-align@^0.1.1: - version "0.1.3" - resolved "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -rsvp@^3.3.3: - version "3.6.2" - resolved "http://registry.npm.taobao.org/rsvp/download/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - -rxjs@^6.1.0: - version "6.2.2" - resolved "http://registry.npm.taobao.org/rxjs/download/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: - version "2.1.2" - resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sane@^2.0.0: - version "2.5.2" - resolved "http://registry.npm.taobao.org/sane/download/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - -sax@^1.2.4: - version "1.2.4" - resolved "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.5.0" - resolved "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -set-value@^0.4.3: - version "0.4.3" - resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@^1.6.1: - version "1.6.1" - resolved "http://registry.npm.taobao.org/shell-quote/download/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shellwords@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -sisteransi@^0.1.1: - version "0.1.1" - resolved "http://registry.npm.taobao.org/sisteransi/download/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - -slash@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0, source-map-support@^0.5.5, source-map-support@^0.5.6: - version "0.5.6" - resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.4.4: - version "0.4.4" - resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: - version "0.5.7" - resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -spdx-correct@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.14.2" - resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - safer-buffer "^2.0.2" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - -staged-git-files@1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/staged-git-files/download/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" - -static-extend@^0.1.1: - version "0.1.2" - resolved "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.0: - version "1.1.1" - resolved "http://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - -string-argv@^0.0.2: - version "0.0.2" - resolved "http://registry.npm.taobao.org/string-argv/download/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - -string-length@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/string-length/download/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.2.2: - version "3.2.2" - resolved "http://registry.npm.taobao.org/stringify-object/download/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" - dependencies: - get-own-enumerable-property-symbols "^2.0.1" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -subarg@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/subarg/download/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - dependencies: - minimist "^1.1.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.2: - version "3.2.3" - resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0: - version "5.4.0" - resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - dependencies: - has-flag "^3.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "http://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -symbol-tree@^3.2.2: - version "3.2.2" - resolved "http://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -tar@^4: - version "4.4.4" - resolved "http://registry.npm.taobao.org/tar/download/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -test-exclude@^4.2.1: - version "4.2.1" - resolved "http://registry.npm.taobao.org/test-exclude/download/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" - dependencies: - arrify "^1.0.1" - micromatch "^3.1.8" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -throat@^4.0.0: - version "4.1.0" - resolved "http://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - -tmpl@1.0.x: - version "1.0.4" - resolved "http://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@>=2.3.3, tough-cookie@^2.3.4: - version "2.4.3" - resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tough-cookie@~2.3.3: - version "2.3.4" - resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - -trim-right@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -ts-jest@22.4.6: - version "22.4.6" - resolved "http://registry.npm.taobao.org/ts-jest/download/ts-jest-22.4.6.tgz#a5d7f5e8b809626d1f4143209d301287472ec344" - dependencies: - babel-core "^6.26.3" - babel-plugin-istanbul "^4.1.6" - babel-plugin-transform-es2015-modules-commonjs "^6.26.2" - babel-preset-jest "^22.4.3" - cpx "^1.5.0" - fs-extra "6.0.0" - jest-config "^22.4.3" - lodash "^4.17.10" - pkg-dir "^2.0.0" - source-map-support "^0.5.5" - yargs "^11.0.0" - -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.9.3" - resolved "http://registry.npm.taobao.org/tslib/download/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - -tslint@^5.11.0: - version "5.11.0" - resolved "http://registry.npm.taobao.org/tslint/download/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" - dependencies: - babel-code-frame "^6.22.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.7.0" - minimatch "^3.0.4" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.27.2" - -tsutils@^2.27.2: - version "2.28.0" - resolved "http://registry.npm.taobao.org/tsutils/download/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typescript@^2.9.2: - version "2.9.2" - resolved "http://registry.npm.taobao.org/typescript/download/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" - -uglify-js@^2.6: - version "2.8.29" - resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -union-value@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -universalify@^0.1.0: - version "0.1.2" - resolved "http://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unset-value@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -urix@^0.1.0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -use@^3.1.0: - version "3.1.1" - resolved "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util.promisify@^1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.1.0: - version "3.3.2" - resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - -validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "http://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - dependencies: - browser-process-hrtime "^0.1.2" - -walker@~1.0.5: - version "1.0.7" - resolved "http://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -watch@~0.18.0: - version "0.18.0" - resolved "http://registry.npm.taobao.org/watch/download/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "http://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.3" - resolved "http://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" - dependencies: - iconv-lite "0.4.19" - -whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" - -whatwg-url@^6.4.0, whatwg-url@^6.4.1: - version "6.5.0" - resolved "http://registry.npm.taobao.org/whatwg-url/download/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^2.0.0: - version "2.0.0" - resolved "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - dependencies: - string-width "^1.0.2 || 2" - -window-size@0.1.0: - version "0.1.0" - resolved "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write-file-atomic@^2.1.0: - version "2.3.0" - resolved "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -ws@^5.2.0: - version "5.2.2" - resolved "http://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - dependencies: - async-limiter "~1.0.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "http://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - -y18n@^3.2.1: - version "3.2.1" - resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.1.2: - version "2.1.2" - resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.1.0" - resolved "http://registry.npm.taobao.org/yargs/download/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - -yargs@~3.10.0: - version "3.10.0" - resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" From f9dbf501a4d94d5e393bee76d1de14b18c4c6b18 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sun, 19 Aug 2018 18:32:01 +0800 Subject: [PATCH 181/497] :bug: fix type of 2d array bug --- src/util/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/util.ts b/src/util/util.ts index 482e535d..75a67f1f 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -35,7 +35,7 @@ function arrayEquals(a: string[], b: string[]): boolean { } // array2DEquals determines whether two 2-dimensional string arrays are identical. -function array2DEquals(a: [string[]], b: [string[]]): boolean { +function array2DEquals(a: string[][], b: string[][]): boolean { return _.isEqual(a, b); } From b1b318c546df933e2521a6ee85a81967fce70278 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 20 Aug 2018 13:08:59 +0800 Subject: [PATCH 182/497] Bump to v1.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 249ac71e..0147ff29 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.0", + "version": "1.1.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From 06b8faa9e73ec99a0fa7ae818a60810a896dfa8f Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 24 Aug 2018 00:11:12 +0800 Subject: [PATCH 183/497] Improve the README about multi-language support. --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index cf3cde4f..3b910610 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,6 @@ node-casbin [![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) [![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](http://www.patreon.com/yangluo) -[![Sourcegraph Badge](https://sourcegraph.com/github.com/casbin/node-casbin/-/badge.svg)](https://sourcegraph.com/github.com/casbin/node-casbin?badge) [npm-image]: https://img.shields.io/npm/v/casbin.svg?style=flat-square [npm-url]: https://npmjs.org/package/casbin @@ -61,12 +60,12 @@ See [Policy management APIs](#policy-management) for more usage. 4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. -## All the languages supported by Casbin: +## All the languages supported by node-casbin: - Golang: [Casbin](https://github.com/casbin/casbin) (production-ready) - Java: [jCasbin](https://github.com/casbin/jcasbin) (production-ready) +- Node.js: [node-casbin](https://github.com/casbin/node-casbin) (production-ready) - PHP: [PHP-Casbin](https://github.com/sstutz/php-casbin) (experimental) -- Node.js: [node-casbin](https://github.com/casbin/node-casbin) (experimental) - C++: xCasbin (WIP) ## Table of contents @@ -217,9 +216,9 @@ Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/mast ### Web frameworks -- [koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) -- [express](https://github.com/expressjs/express): Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) -- [egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa , via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) +- [Express](https://github.com/expressjs/express): Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) +- [Koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) +- [Egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa , via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) ## License From 056ddad197ccc6be61f928b6d504f5379a566374 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 00:27:18 +0800 Subject: [PATCH 184/497] Add all other enforcer tests. --- examples/rbac_model_in_multi_line.conf | 15 + examples/rbac_model_matcher_using_in_op.conf | 14 + test/enforcer.test.ts | 310 +++++++++++++++++++ 3 files changed, 339 insertions(+) create mode 100644 examples/rbac_model_in_multi_line.conf create mode 100644 examples/rbac_model_matcher_using_in_op.conf diff --git a/examples/rbac_model_in_multi_line.conf b/examples/rbac_model_in_multi_line.conf new file mode 100644 index 00000000..17771b67 --- /dev/null +++ b/examples/rbac_model_in_multi_line.conf @@ -0,0 +1,15 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj \ + && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_model_matcher_using_in_op.conf b/examples/rbac_model_matcher_using_in_op.conf new file mode 100644 index 00000000..227d1494 --- /dev/null +++ b/examples/rbac_model_matcher_using_in_op.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3') \ No newline at end of file diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 24141ab8..91403d91 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -14,11 +14,19 @@ import { Enforcer } from '../src/enforcer'; import { FileAdapter } from '../src/persist'; +import { Util } from '../src/casbin'; function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); } +function testGetPolicy(e: Enforcer, res: string[][]) { + const myRes = e.getPolicy(); + console.log('Policy: ', myRes); + + expect(Util.array2DEquals(res, myRes)).toBe(true); +} + test('TestKeyMatchModelInMemory', async () => { const m = Enforcer.newModel(); m.addDef('r', 'r', 'sub, obj, act'); @@ -53,6 +61,7 @@ test('TestKeyMatchModelInMemory', async () => { testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); e = await Enforcer.newEnforcer(m); + a.loadPolicy(e.getModel()); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -90,3 +99,304 @@ test('TestKeyMatchModelInMemoryDeny', async () => { testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); }); + +test('TestRBACModelInMemoryIndeterminate', async () => { + const m = Enforcer.newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); + + const e = await Enforcer.newEnforcer(m); + + e.addPermissionForUser('alice', 'data1', 'invalid'); + + testEnforce(e, 'alice', 'data1', 'read', false); +}); + +test('TestRBACModelInMemory', async () => { + const m = Enforcer.newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); + + const e = await Enforcer.newEnforcer(m); + + e.addPermissionForUser('alice', 'data1', 'read'); + e.addPermissionForUser('bob', 'data2', 'write'); + e.addPermissionForUser('data2_admin', 'data2', 'read'); + e.addPermissionForUser('data2_admin', 'data2', 'write'); + e.addRoleForUser('alice', 'data2_admin'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestRBACModelInMemory2', async () => { + const text = + ` +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act +`; + const m = Enforcer.newModel(text); + // The above is the same as: + // const m = Enforcer.newModel(); + // m.loadModelFromText(text); + + const e = await Enforcer.newEnforcer(m); + + e.addPermissionForUser('alice', 'data1', 'read'); + e.addPermissionForUser('bob', 'data2', 'write'); + e.addPermissionForUser('data2_admin', 'data2', 'read'); + e.addPermissionForUser('data2_admin', 'data2', 'write'); + e.addRoleForUser('alice', 'data2_admin'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestNotUsedRBACModelInMemory', async () => { + const m = Enforcer.newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); + + const e = await Enforcer.newEnforcer(m); + + e.addPermissionForUser('alice', 'data1', 'read'); + e.addPermissionForUser('bob', 'data2', 'write'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestMatcherUsingInOperator', async () => { +// From file config + const e = await Enforcer.newEnforcer('examples/rbac_model_matcher_using_in_op.conf'); + e.addPermissionForUser('alice', 'data1', 'read'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data3', 'read', true); + testEnforce(e, 'anyone', 'data1', 'read', false); + testEnforce(e, 'anyone', 'data2', 'read', true); + testEnforce(e, 'anyone', 'data3', 'read', true); +}); + +test('TestReloadPolicy', async () => { + const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + + e.loadPolicy(); + testGetPolicy(e, [['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); +}); + +test('TestSavePolicy', async () => { + const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + + e.savePolicy(); +}); + +test('TestClearPolicy', async () => { + const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + + e.clearPolicy(); +}); + +test('TestEnableEnforce', async () => { + const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + + e.enableEnforce(false); + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', true); + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data1', 'read', true); + testEnforce(e, 'bob', 'data1', 'write', true); + testEnforce(e, 'bob', 'data2', 'read', true); + testEnforce(e, 'bob', 'data2', 'write', true); + + e.enableEnforce(true); + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestEnableLog', async () => { + const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv', true); + // The log is enabled by default, so the above is the same with: + // const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); + + // The log can also be enabled or disabled at run-time. + e.enableLog(false); + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestEnableAutoSave', async () => { + const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + + e.enableAutoSave(false); + // Because AutoSave is disabled, the policy change only affects the policy in Casbin enforcer, + // it doesn't affect the policy in the storage. + e.removePolicy('alice', 'data1', 'read'); + // Reload the policy from the storage to see the effect. + e.loadPolicy(); + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); + + e.enableAutoSave(true); + // Because AutoSave is enabled, the policy change not only affects the policy in Casbin enforcer, + // but also affects the policy in the storage. + e.removePolicy('alice', 'data1', 'read'); + + // However, the file adapter doesn't implement the AutoSave feature, so enabling it has no effect at all here. + + // Reload the policy from the storage to see the effect. + e.loadPolicy(); + testEnforce(e, 'alice', 'data1', 'read', true); // Will not be false here. + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestInitWithAdapter', async () => { + const adapter = new FileAdapter('examples/basic_policy.csv'); + const e = await Enforcer.newEnforcer('examples/basic_model.conf', adapter); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); + +test('TestRoleLinks', async () => { + const e = await Enforcer.newEnforcer('examples/rbac_model.conf'); + e.enableAutoBuildRoleLinks(false); + e.buildRoleLinks(); + e.enforce('user501', 'data9', 'read'); +}); + +test('TestGetAndSetModel', async () => { + const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await Enforcer.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + + testEnforce(e, 'root', 'data1', 'read', false); + + e.setModel(e2.getModel()); + + testEnforce(e, 'root', 'data1', 'read', true); +}); + +test('TestGetAndSetAdapterInMem', async () => { + const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + + const a2 = e2.getAdapter(); + e.setAdapter(a2); + e.loadPolicy(); + + testEnforce(e, 'alice', 'data1', 'read', false); + testEnforce(e, 'alice', 'data1', 'write', true); +}); + +test('TestSetAdapterFromFile', async () => { + const e = await Enforcer.newEnforcer('examples/basic_model.conf'); + + testEnforce(e, 'alice', 'data1', 'read', false); + + const a = new FileAdapter('examples/basic_policy.csv'); + e.setAdapter(a); + e.loadPolicy(); + + testEnforce(e, 'alice', 'data1', 'read', true); +}); + +test('TestInitEmpty', async () => { + const e = await Enforcer.newEnforcer(); + + const m = Enforcer.newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); + + const a = new FileAdapter('examples/keymatch_policy.csv'); + + e.setModel(m); + e.setAdapter(a); + e.loadPolicy(); + + testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); +}); From 3428ad6dad052f5336ddc182754345abfc96d335 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 09:54:07 +0800 Subject: [PATCH 185/497] Refactor out CoreEnforcer from Enforcer class. --- src/coreEnforcer.ts | 410 ++++++++++++++++++++++++++++++++++++++++++++ src/enforcer.ts | 397 +----------------------------------------- 2 files changed, 414 insertions(+), 393 deletions(-) create mode 100644 src/coreEnforcer.ts diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts new file mode 100644 index 00000000..06ed18dc --- /dev/null +++ b/src/coreEnforcer.ts @@ -0,0 +1,410 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { compile } from 'expression-eval'; +import * as _ from 'lodash'; + +import { DefaultEffector, Effect, Effector } from './effect'; +import { FunctionMap, Model } from './model'; +import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; +import { DefaultRoleManager, RoleManager } from './rbac'; +import { generateGFunction, getEnableLog, logPrint, setEnableLog } from './util'; + +/** + * CoreEnforcer defines the core functionality of an enforcer. + */ +export class CoreEnforcer { + protected modelPath: string; + protected model: Model; + protected fm: FunctionMap; + private eft: Effector; + + protected adapter: FilteredAdapter | Adapter; + protected watcher: Watcher | null = null; + private rm: RoleManager; + + private enabled: boolean; + protected autoSave: boolean; + protected autoBuildRoleLinks: boolean; + + public initialize(): void { + this.rm = new DefaultRoleManager(10); + this.eft = new DefaultEffector(); + this.watcher = null; + + this.enabled = true; + this.autoSave = true; + this.autoBuildRoleLinks = true; + } + + /** + * newModel creates a model. + */ + public static newModel(...text: string[]): Model { + const m = new Model(); + + if (text.length === 2) { + if (text[0] !== '') { + m.loadModel(text[0]); + } + } else if (text.length === 1) { + m.loadModelFromText(text[0]); + } else if (text.length !== 0) { + throw new Error('Invalid parameters for model.'); + } + + return m; + } + + /** + * loadModel reloads the model from the model CONF file. + * Because the policy is attached to a model, + * so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). + */ + public loadModel(): void { + this.model = CoreEnforcer.newModel(); + this.model.loadModel(this.modelPath); + this.model.printModel(); + this.fm = FunctionMap.loadFunctionMap(); + } + + /** + * getModel gets the current model. + * + * @return the model of the enforcer. + */ + public getModel(): Model { + return this.model; + } + + /** + * setModel sets the current model. + * + * @param m the model. + */ + public setModel(m: Model): void { + this.model = m; + this.fm = FunctionMap.loadFunctionMap(); + } + + /** + * getAdapter gets the current adapter. + * + * @return the adapter of the enforcer. + */ + public getAdapter(): Adapter { + return this.adapter; + } + + /** + * setAdapter sets the current adapter. + * + * @param adapter the adapter. + */ + public setAdapter(adapter: Adapter): void { + this.adapter = adapter; + } + + /** + * setWatcher sets the current watcher. + * + * @param watcher the watcher. + */ + public setWatcher(watcher: Watcher): void { + this.watcher = watcher; + watcher.setUpdateCallback(async () => await this.loadPolicy()); + } + + /** + * setRoleManager sets the current role manager. + * + * @param rm the role manager. + */ + public setRoleManager(rm: RoleManager): void { + this.rm = rm; + } + + /** + * setEffector sets the current effector. + * + * @param eft the effector. + */ + public setEffector(eft: Effector): void { + this.eft = eft; + } + + /** + * clearPolicy clears all policy. + */ + public clearPolicy(): void { + this.model.clearPolicy(); + } + + /** + * loadPolicy reloads the policy from file/database. + */ + public async loadPolicy(): Promise { + this.model.clearPolicy(); + await this.adapter.loadPolicy(this.model); + + this.model.printPolicy(); + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + } + + /** + * loadFilteredPolicy reloads a filtered policy from file/database. + * + * @param filter the filter used to specify which type of policy should be loaded. + */ + public loadFilteredPolicy(filter: Filter): boolean { + this.model.clearPolicy(); + + if ((this.adapter as FilteredAdapter).isFiltered) { + (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); + } else { + throw new Error('filtered policies are not supported by this adapter'); + } + + this.model.printPolicy(); + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + return true; + } + + /** + * isFiltered returns true if the loaded policy has been filtered. + * + * @return if the loaded policy has been filtered. + */ + public isFiltered(): boolean { + if ((this.adapter as FilteredAdapter).isFiltered) { + return (this.adapter as FilteredAdapter).isFiltered(); + } + return false; + } + + /** + * savePolicy saves the current policy (usually after changed with + * Casbin API) back to file/database. + */ + public async savePolicy(): Promise { + if (this.isFiltered()) { + throw new Error('cannot save a filtered policy'); + } + const flag = await this.adapter.savePolicy(this.model); + if (!flag) { + return false; + } + if (this.watcher) { + return this.watcher.update(); + } + return true; + } + + /** + * enableEnforce changes the enforcing state of Casbin, when Casbin is + * disabled, all access will be allowed by the enforce() function. + * + * @param enable whether to enable the enforcer. + */ + public enableEnforce(enable: boolean): void { + this.enabled = enable; + } + + /** + * enableLog changes whether to print Casbin log to the standard output. + * + * @param enable whether to enable Casbin's log. + */ + public static enableLog(enable: boolean): void { + setEnableLog(enable); + } + + /** + * enableAutoSave controls whether to save a policy rule automatically to + * the adapter when it is added or removed. + * + * @param autoSave whether to enable the AutoSave feature. + */ + public enableAutoSave(autoSave: boolean): void { + this.autoSave = autoSave; + } + + /** + * enableAutoBuildRoleLinks controls whether to save a policy rule + * automatically to the adapter when it is added or removed. + * + * @param autoBuildRoleLinks whether to automatically build the role links. + */ + public enableAutoBuildRoleLinks(autoBuildRoleLinks: boolean): void { + this.autoBuildRoleLinks = autoBuildRoleLinks; + } + + /** + * buildRoleLinks manually rebuild the + * role inheritance relations. + */ + public buildRoleLinks() { + // error intentionally ignored + this.rm.clear(); + this.model.buildRoleLinks(this.rm); + } + + /** + * enforce decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ + public enforce(...rvals: any[]): boolean { + if (!this.enabled) { + return true; + } + + const functions: { [key: string]: any } = {}; + this.fm.getFunctions().forEach((value: any, key: string) => { + functions[key] = value; + }); + + const astMap = this.model.model.get('g'); + if (astMap) { + astMap.forEach((value, key) => { + const rm = value.rm; + functions[key] = generateGFunction(rm); + }); + } + + // @ts-ignore + const expString = this.model.model.get('m').get('m').value; + if (!expString) { + throw new Error('model is undefined'); + } + + const expression = compile(expString); + + let policyEffects: Effect[]; + let matcherResults: number[]; + // @ts-ignore + const policyLen = this.model.model.get('p').get('p').policy.length; + if (policyLen !== 0) { + policyEffects = new Array(policyLen); + matcherResults = new Array(policyLen); + + for (let i = 0; i < policyLen; i++) { + // @ts-ignore + const pvals = this.model.model.get('p').get('p').policy[i]; + + // logPrint('Policy Rule: ', pvals); + + const parameters: { [key: string]: any } = {}; + // @ts-ignore + this.model.model.get('r').get('r').tokens.forEach((token, j) => { + parameters[token] = rvals[j].trim(); + }); + // @ts-ignore + this.model.model.get('p').get('p').tokens.forEach((token, j) => { + parameters[token] = pvals[j].trim(); + }); + + const result = expression({ ...parameters, ...functions }); + + switch (typeof result) { + case 'boolean': + if (!result) { + policyEffects[i] = Effect.Indeterminate; + continue; + } + break; + case 'number': + if (result === 0) { + policyEffects[i] = Effect.Indeterminate; + continue; + } else { + matcherResults[i] = result; + } + break; + default: + throw new Error('matcher result should be boolean or number'); + } + + if (_.has(parameters, 'p_eft')) { + const eft = _.get(parameters, 'p_eft'); + if (eft === 'allow') { + policyEffects[i] = Effect.Allow; + } else if (eft === 'deny') { + policyEffects[i] = Effect.Deny; + } else { + policyEffects[i] = Effect.Indeterminate; + } + } else { + policyEffects[i] = Effect.Allow; + } + + // @ts-ignore + if (this.model.model.get('e').get('e').value === 'priority(p_eft) || deny') { + break; + } + } + } else { + policyEffects = new Array(1); + matcherResults = new Array(1); + + const parameters: { [key: string]: any } = {}; + // @ts-ignore + this.model.model.get('r').get('r').tokens.forEach((token, j) => { + parameters[token] = rvals[j]; + }); + // @ts-ignore + this.model.model.get('p').get('p').tokens.forEach((token) => { + parameters[token] = ''; + }); + + const result = expression({ ...parameters, ...functions }); + // logPrint(`Result: ${result}`); + + if (result) { + policyEffects[0] = Effect.Allow; + } else { + policyEffects[0] = Effect.Indeterminate; + } + } + + // logPrint(`Rule Results: ${policyEffects}`); + + // @ts-ignore + const res = this.eft.mergeEffects(this.model.model.get('e').get('e').value, policyEffects, matcherResults); + + // only generate the request --> result string if the message + // is going to be logged. + if (getEnableLog()) { + let reqStr = 'Request: '; + for (let i = 0; i < rvals.length; i++) { + if (i !== rvals.length - 1) { + reqStr += `${rvals[i]}, `; + } else { + reqStr += rvals[i]; + } + } + reqStr += ` ---> ${res}`; + logPrint(reqStr); + } + + return res; + } +} diff --git a/src/enforcer.ts b/src/enforcer.ts index f54c44fc..7e982dc3 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,33 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { generateGFunction, getEnableLog, logPrint, setEnableLog } from './util'; +import { CoreEnforcer } from './coreEnforcer'; import { FunctionMap, Model } from './model'; -import { DefaultEffector, Effect, Effector } from './effect'; -import { compile } from 'expression-eval'; - -import * as _ from 'lodash'; -import { Adapter, FileAdapter, Filter, FilteredAdapter, Watcher } from './persist'; -import { DefaultRoleManager, RoleManager } from './rbac'; - -const NotImplemented = 'not implemented'; - -/** - * Enforcer is the main interface for authorization enforcement and policy management. - */ -export class Enforcer { - public model: Model; - private modelPath: string; - private fm: FunctionMap; - public eft: Effector; - - private adapter: FilteredAdapter | Adapter; - private watcher: Watcher | null = null; - public rm: RoleManager; - public enabled: boolean; - private autoSave: boolean; - private autoBuildRoleLinks: boolean; +import { Adapter, FileAdapter } from './persist'; +import { setEnableLog } from './util'; +export class Enforcer extends CoreEnforcer { /** * newEnforcer creates an enforcer via file or DB. * @@ -57,8 +36,6 @@ export class Enforcer { */ public static async newEnforcer(...params: any[]): Promise { const e = new Enforcer(); - e.rm = new DefaultRoleManager(10); - e.eft = new DefaultEffector(); let parsedParamLen = 0; if (params.length >= 1) { @@ -141,372 +118,6 @@ export class Enforcer { } } - public initialize(): void { - this.enabled = true; - this.autoSave = true; - this.autoBuildRoleLinks = true; - } - - /** - * newModel creates a model. - */ - public static newModel(...text: string[]): Model { - const m = new Model(); - - if (text.length === 2) { - if (text[0] !== '') { - m.loadModel(text[0]); - } - } else if (text.length === 1) { - m.loadModelFromText(text[0]); - } else if (text.length !== 0) { - throw new Error('Invalid parameters for model.'); - } - - return m; - } - - /** - * loadModel reloads the model from the model CONF file. - * Because the policy is attached to a model, - * so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). - */ - public loadModel(): void { - this.model = Enforcer.newModel(); - this.model.loadModel(this.modelPath); - this.model.printModel(); - this.fm = FunctionMap.loadFunctionMap(); - } - - /** - * getModel gets the current model. - * - * @return the model of the enforcer. - */ - public getModel(): Model { - return this.model; - } - - /** - * setModel sets the current model. - * - * @param m the model. - */ - public setModel(m: Model): void { - this.model = m; - this.fm = FunctionMap.loadFunctionMap(); - } - - /** - * getAdapter gets the current adapter. - * - * @return the adapter of the enforcer. - */ - public getAdapter(): Adapter { - return this.adapter; - } - - /** - * setAdapter sets the current adapter. - * - * @param adapter the adapter. - */ - public setAdapter(adapter: Adapter): void { - this.adapter = adapter; - } - - /** - * setWatcher sets the current watcher. - * - * @param watcher the watcher. - */ - public setWatcher(watcher: Watcher): void { - this.watcher = watcher; - watcher.setUpdateCallback(async () => await this.loadPolicy()); - } - - /** - * setRoleManager sets the current role manager. - * - * @param rm the role manager. - */ - public setRoleManager(rm: RoleManager): void { - this.rm = rm; - } - - /** - * setEffector sets the current effector. - * - * @param eft the effector. - */ - public setEffector(eft: Effector): void { - this.eft = eft; - } - - /** - * clearPolicy clears all policy. - */ - public clearPolicy(): void { - this.model.clearPolicy(); - } - - /** - * loadPolicy reloads the policy from file/database. - */ - public async loadPolicy(): Promise { - this.model.clearPolicy(); - await this.adapter.loadPolicy(this.model); - - this.model.printPolicy(); - if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); - } - } - - /** - * loadFilteredPolicy reloads a filtered policy from file/database. - * - * @param filter the filter used to specify which type of policy should be loaded. - */ - public loadFilteredPolicy(filter: Filter): boolean { - this.model.clearPolicy(); - - if ((this.adapter as FilteredAdapter).isFiltered) { - (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); - } else { - throw new Error('filtered policies are not supported by this adapter'); - } - - this.model.printPolicy(); - if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); - } - return true; - } - - /** - * isFiltered returns true if the loaded policy has been filtered. - * - * @return if the loaded policy has been filtered. - */ - public isFiltered(): boolean { - if ((this.adapter as FilteredAdapter).isFiltered) { - return (this.adapter as FilteredAdapter).isFiltered(); - } - return false; - } - - /** - * savePolicy saves the current policy (usually after changed with - * Casbin API) back to file/database. - */ - public async savePolicy(): Promise { - if (this.isFiltered()) { - throw new Error('cannot save a filtered policy'); - } - const flag = await this.adapter.savePolicy(this.model); - if (!flag) { - return false; - } - if (this.watcher) { - return this.watcher.update(); - } - return true; - } - - /** - * enableEnforce changes the enforcing state of Casbin, when Casbin is - * disabled, all access will be allowed by the enforce() function. - * - * @param enable whether to enable the enforcer. - */ - public enableEnforce(enable: boolean): void { - this.enabled = enable; - } - - /** - * enableLog changes whether to print Casbin log to the standard output. - * - * @param enable whether to enable Casbin's log. - */ - public static enableLog(enable: boolean): void { - setEnableLog(enable); - } - - /** - * enableAutoSave controls whether to save a policy rule automatically to - * the adapter when it is added or removed. - * - * @param autoSave whether to enable the AutoSave feature. - */ - public enableAutoSave(autoSave: boolean): void { - this.autoSave = autoSave; - } - - /** - * enableAutoBuildRoleLinks controls whether to save a policy rule - * automatically to the adapter when it is added or removed. - * - * @param autoBuildRoleLinks whether to automatically build the role links. - */ - public enableAutoBuildRoleLinks(autoBuildRoleLinks: boolean): void { - this.autoBuildRoleLinks = autoBuildRoleLinks; - } - - /** - * buildRoleLinks manually rebuild the - * role inheritance relations. - */ - public buildRoleLinks() { - // error intentionally ignored - this.rm.clear(); - this.model.buildRoleLinks(this.rm); - } - - /** - * enforce decides whether a "subject" can access a "object" with - * the operation "action", input parameters are usually: (sub, obj, act). - * - * @param rvals the request needs to be mediated, usually an array - * of strings, can be class instances if ABAC is used. - * @return whether to allow the request. - */ - public enforce(...rvals: any[]): boolean { - if (!this.enabled) { - return true; - } - - const functions: { [key: string]: any } = {}; - this.fm.getFunctions().forEach((value: any, key: string) => { - functions[key] = value; - }); - - const astMap = this.model.model.get('g'); - if (astMap) { - astMap.forEach((value, key) => { - const rm = value.rm; - functions[key] = generateGFunction(rm); - }); - } - - // @ts-ignore - const expString = this.model.model.get('m').get('m').value; - if (!expString) { - throw new Error('model is undefined'); - } - - const expression = compile(expString); - - let policyEffects: Effect[]; - let matcherResults: number[]; - // @ts-ignore - const policyLen = this.model.model.get('p').get('p').policy.length; - if (policyLen !== 0) { - policyEffects = new Array(policyLen); - matcherResults = new Array(policyLen); - - for (let i = 0; i < policyLen; i++) { - // @ts-ignore - const pvals = this.model.model.get('p').get('p').policy[i]; - - // logPrint('Policy Rule: ', pvals); - - const parameters: { [key: string]: any } = {}; - // @ts-ignore - this.model.model.get('r').get('r').tokens.forEach((token, j) => { - parameters[token] = rvals[j].trim(); - }); - // @ts-ignore - this.model.model.get('p').get('p').tokens.forEach((token, j) => { - parameters[token] = pvals[j].trim(); - }); - - const result = expression({ ...parameters, ...functions }); - - switch (typeof result) { - case 'boolean': - if (!result) { - policyEffects[i] = Effect.Indeterminate; - continue; - } - break; - case 'number': - if (result === 0) { - policyEffects[i] = Effect.Indeterminate; - continue; - } else { - matcherResults[i] = result; - } - break; - default: - throw new Error('matcher result should be boolean or number'); - } - - if (_.has(parameters, 'p_eft')) { - const eft = _.get(parameters, 'p_eft'); - if (eft === 'allow') { - policyEffects[i] = Effect.Allow; - } else if (eft === 'deny') { - policyEffects[i] = Effect.Deny; - } else { - policyEffects[i] = Effect.Indeterminate; - } - } else { - policyEffects[i] = Effect.Allow; - } - - // @ts-ignore - if (this.model.model.get('e').get('e').value === 'priority(p_eft) || deny') { - break; - } - } - } else { - policyEffects = new Array(1); - matcherResults = new Array(1); - - const parameters: { [key: string]: any } = {}; - // @ts-ignore - this.model.model.get('r').get('r').tokens.forEach((token, j) => { - parameters[token] = rvals[j]; - }); - // @ts-ignore - this.model.model.get('p').get('p').tokens.forEach((token) => { - parameters[token] = ''; - }); - - const result = expression({ ...parameters, ...functions }); - // logPrint(`Result: ${result}`); - - if (result) { - policyEffects[0] = Effect.Allow; - } else { - policyEffects[0] = Effect.Indeterminate; - } - } - - // logPrint(`Rule Results: ${policyEffects}`); - - // @ts-ignore - const res = this.eft.mergeEffects(this.model.model.get('e').get('e').value, policyEffects, matcherResults); - - // only generate the request --> result string if the message - // is going to be logged. - if (getEnableLog()) { - let reqStr = 'Request: '; - for (let i = 0; i < rvals.length; i++) { - if (i !== rvals.length - 1) { - reqStr += `${rvals[i]}, `; - } else { - reqStr += rvals[i]; - } - } - reqStr += ` ---> ${res}`; - logPrint(reqStr); - } - - return res; - } - // **************Internal API************* /** * addPolicy adds a rule to the current policy. From 292e5a9fd3eff6eb5d4be5aa31dd759fc08ce68b Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:10:58 +0800 Subject: [PATCH 186/497] Refactor out InternalEnforcer from Enforcer class. --- src/enforcer.ts | 197 ++++++++++++---------------------------- src/internalEnforcer.ts | 101 ++++++++++++++++++++ 2 files changed, 161 insertions(+), 137 deletions(-) create mode 100644 src/internalEnforcer.ts diff --git a/src/enforcer.ts b/src/enforcer.ts index 7e982dc3..d80ad56e 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { CoreEnforcer } from './coreEnforcer'; +import { InternalEnforcer } from './internalEnforcer'; import { FunctionMap, Model } from './model'; import { Adapter, FileAdapter } from './persist'; import { setEnableLog } from './util'; -export class Enforcer extends CoreEnforcer { +export class Enforcer extends InternalEnforcer { /** * newEnforcer creates an enforcer via file or DB. * @@ -101,15 +101,15 @@ export class Enforcer extends CoreEnforcer { * @param m model instance * @param adapter current adapter instance */ - public async initWithModelAndAdapter(m: Model, adapter: Adapter | null): Promise { + public async initWithModelAndAdapter(m: Model, adapter: Adapter): Promise { if (adapter) { this.adapter = adapter; } - this.watcher = null; this.model = m; this.model.printModel(); this.fm = FunctionMap.loadFunctionMap(); + this.initialize(); if (this.adapter) { @@ -118,85 +118,6 @@ export class Enforcer extends CoreEnforcer { } } - // **************Internal API************* - /** - * addPolicy adds a rule to the current policy. - */ - public async addPolicy(sec: string | any[], key?: string, rule?: string[]): Promise { - if (typeof sec === 'string' && key && rule) { - const ruleAdded = this.model.addPolicy(sec, key, rule); - if (!ruleAdded) { - return ruleAdded; - } - - if (this.adapter !== null && this.autoSave) { - await this.adapter.addPolicy(sec, key, rule); - if (this.watcher !== null) { - // error intentionally ignored - this.watcher.update(); - } - } - - return ruleAdded; - } else if (sec instanceof Array) { - return await this.addNamedPolicy('p', sec); - } else { - return false; - } - } - - /** - * removePolicy removes a rule from the current policy. - */ - public async removePolicy(sec: string | any[], key?: string, rule?: string[]): Promise { - if (typeof sec === 'string' && key && rule) { - const ruleRemoved = this.model.removePolicy(sec, key, rule); - if (!ruleRemoved) { - return ruleRemoved; - } - - if (this.adapter !== null && this.autoSave) { - await this.adapter.removePolicy(sec, key, rule); - if (this.watcher !== null) { - // error intentionally ignored - this.watcher.update(); - } - } - - return ruleRemoved; - } else if (sec instanceof Array) { - return await this.removeNamedPolicy('p', sec); - } else { - return false; - } - } - - /** - * removeFilteredPolicy removes rules based on field filters from the current policy. - */ - public async removeFilteredPolicy(sec: string | number, key: string | string[], fieldIndex?: number, fieldValues?: string[]): Promise { - if (typeof sec === 'string' && typeof key === 'string' && fieldIndex && fieldValues instanceof Array) { - const ruleRemoved = this.model.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); - if (!ruleRemoved) { - return ruleRemoved; - } - - if (this.adapter !== null && this.autoSave) { - await this.adapter.removeFilteredPolicy(sec, key, fieldIndex, ...fieldValues); - if (this.watcher !== null) { - // error intentionally ignored - this.watcher.update(); - } - } - - return ruleRemoved; - } else if (typeof sec === 'number' && key instanceof Array) { - return await this.removeFilteredNamedPolicy('p', sec, key); - } else { - return false; - } - } - // **************Management API************* /** * getAllSubjects gets the list of subjects that show up in the current policy. @@ -390,7 +311,7 @@ export class Enforcer extends CoreEnforcer { * @param params the "p" policy rule, ptype "p" is implicitly used. * @return whether the rule exists. */ - public hasPolicy(...params: any[]): boolean { + public hasPolicy(...params: string[]): boolean { return this.hasNamedPolicy('p', ...params); } @@ -401,14 +322,22 @@ export class Enforcer extends CoreEnforcer { * @param params the "p" policy rule. * @return whether the rule exists. */ - public hasNamedPolicy(ptype: string, ...params: any[]): boolean { - if (params.length === 1 && params[0] instanceof Array) { - return this.model.hasPolicy('p', ptype, params[0]); - } - + public hasNamedPolicy(ptype: string, ...params: string[]): boolean { return this.model.hasPolicy('p', ptype, params); } + /** + * addPolicy adds an authorization rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async addPolicy(...params: string[]): Promise { + return this.addNamedPolicy('p', ...params); + } + /** * addNamedPolicy adds an authorization rule to the current named policy. * If the rule already exists, the function returns false and the rule will not be added. @@ -418,15 +347,30 @@ export class Enforcer extends CoreEnforcer { * @param params the "p" policy rule. * @return succeeds or not. */ - public async addNamedPolicy(ptype: string, params: any[]): Promise { - let ruleAdded = false; - if (params.length === 1 && params[0] instanceof Array) { - ruleAdded = await this.addPolicy('p', ptype, params[0]); - } else { - ruleAdded = await this.addPolicy('p', ptype, params); - } + public async addNamedPolicy(ptype: string, ...params: string[]): Promise { + return await this.addPolicyInternal('p', ptype, params); + } + + /** + * removePolicy removes an authorization rule from the current policy. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async removePolicy(...params: string[]): Promise { + return await this.removeNamedPolicy('p', ...params); + } - return ruleAdded; + /** + * removeFilteredPolicy removes an authorization rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return await this.removeFilteredNamedPolicy('p', fieldIndex, fieldValues); } /** @@ -436,15 +380,8 @@ export class Enforcer extends CoreEnforcer { * @param params the "p" policy rule. * @return succeeds or not. */ - public async removeNamedPolicy(ptype: string, params: any[]): Promise { - let ruleRemoved = false; - if (params.length === 1 && params[0] instanceof Array) { - ruleRemoved = await this.removePolicy('p', ptype, params[0]); - } else { - ruleRemoved = await this.removePolicy('p', ptype, params); - } - - return ruleRemoved; + public async removeNamedPolicy(ptype: string, ...params: string[]): Promise { + return await this.removePolicyInternal('p', ptype, params); } /** @@ -457,7 +394,7 @@ export class Enforcer extends CoreEnforcer { * @return succeeds or not. */ public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): Promise { - return await this.removeFilteredPolicy('p', ptype, fieldIndex, fieldValues); + return await this.removeFilteredPolicyInternal('p', ptype, fieldIndex, fieldValues); } /** @@ -465,8 +402,8 @@ export class Enforcer extends CoreEnforcer { * * @param params the "g" policy rule, ptype "g" is implicitly used. * @return whether the rule exists. - */ public hasGroupingPolicy(...params: any[]): boolean { - return this.hasNamedGroupingPolicy('g', params); + */ public hasGroupingPolicy(...params: string[]): boolean { + return this.hasNamedGroupingPolicy('g', ...params); } /** @@ -476,11 +413,7 @@ export class Enforcer extends CoreEnforcer { * @param params the "g" policy rule. * @return whether the rule exists. */ - public hasNamedGroupingPolicy(ptype: string, ...params: any[]): boolean { - if (params.length === 1 && params[0] instanceof Array) { - return this.model.hasPolicy('g', ptype, params[0]); - } - + public hasNamedGroupingPolicy(ptype: string, ...params: string[]): boolean { return this.model.hasPolicy('g', ptype, params); } @@ -492,8 +425,8 @@ export class Enforcer extends CoreEnforcer { * @param params the "g" policy rule, ptype "g" is implicitly used. * @return succeeds or not. */ - public async addGroupingPolicy(...params: any[]): Promise { - return await this.addNamedGroupingPolicy('g', params); + public async addGroupingPolicy(...params: string[]): Promise { + return await this.addNamedGroupingPolicy('g', ...params); } /** @@ -505,13 +438,8 @@ export class Enforcer extends CoreEnforcer { * @param params the "g" policy rule. * @return succeeds or not. */ - public async addNamedGroupingPolicy(ptype: string, ...params: any[]): Promise { - let ruleadded = false; - if (params.length === 1 && params[0] instanceof Array) { - ruleadded = await this.addPolicy('g', ptype, params[0]); - } else { - ruleadded = await this.addPolicy('g', ptype, params); - } + public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + const ruleadded = await this.addPolicy('g', ptype, ...params); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); @@ -526,8 +454,8 @@ export class Enforcer extends CoreEnforcer { * @param params the "g" policy rule, ptype "g" is implicitly used. * @return succeeds or not. */ - public async removeGroupingPolicy(...params: any[]): Promise { - return await this.removeNamedGroupingPolicy('g', params); + public async removeGroupingPolicy(...params: string[]): Promise { + return await this.removeNamedGroupingPolicy('g', ...params); } /** @@ -549,13 +477,8 @@ export class Enforcer extends CoreEnforcer { * @param params the "g" policy rule. * @return succeeds or not. */ - public async removeNamedGroupingPolicy(ptype: string, ...params: any[]): Promise { - let ruleRemoved = false; - if (params.length === 1 && params[0] instanceof Array) { - ruleRemoved = await this.removePolicy('g', ptype, params[0]); - } else { - ruleRemoved = await this.removePolicy('g', ptype, params); - } + public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + const ruleRemoved = await this.removePolicy('g', ptype, ...params); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); @@ -573,7 +496,7 @@ export class Enforcer extends CoreEnforcer { * @return succeeds or not. */ public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - const ruleRemoved = await this.removeFilteredPolicy('g', ptype, fieldIndex, fieldValues); + const ruleRemoved = await this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); } @@ -700,7 +623,7 @@ export class Enforcer extends CoreEnforcer { * @return succeeds or not. */ public async deletePermission(...permission: string[]): Promise { - return await this.removeFilteredPolicy(1, permission); + return await this.removeFilteredPolicy(1, ...permission); } /** @@ -713,7 +636,7 @@ export class Enforcer extends CoreEnforcer { */ public async addPermissionForUser(user: string, ...permission: string[]): Promise { permission.unshift(user); - return await this.addPolicy(permission); + return await this.addPolicy(...permission); } /** @@ -726,7 +649,7 @@ export class Enforcer extends CoreEnforcer { */ public async deletePermissionForUser(user: string, ...permission: string[]): Promise { permission.unshift(user); - return await this.removePolicy(permission); + return await this.removePolicy(...permission); } /** @@ -759,6 +682,6 @@ export class Enforcer extends CoreEnforcer { */ public hasPermissionForUser(user: string, ...permission: string[]): boolean { permission.unshift(user); - return this.hasPolicy(permission); + return this.hasPolicy(...permission); } } diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts new file mode 100644 index 00000000..23410177 --- /dev/null +++ b/src/internalEnforcer.ts @@ -0,0 +1,101 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { CoreEnforcer } from './coreEnforcer'; + +/** + * InternalEnforcer = CoreEnforcer + Internal API. + */ +export class InternalEnforcer extends CoreEnforcer { + /** + * addPolicyInternal adds a rule to the current policy. + */ + public async addPolicyInternal(sec: string, ptype: string, rule: string[]): Promise { + const ruleAdded = this.model.addPolicy(sec, ptype, rule); + if (!ruleAdded) { + return ruleAdded; + } + + if (this.adapter !== null && this.autoSave) { + try { + await this.adapter.addPolicy(sec, ptype, rule); + } catch (e) { + if (e.toString() !== 'not implemented') { + throw e; + } + } + + if (this.watcher !== null) { + // error intentionally ignored + this.watcher.update(); + } + } + + return ruleAdded; + } + + /** + * removePolicyInternal removes a rule from the current policy. + */ + public async removePolicyInternal(sec: string, ptype: string, rule: string[]): Promise { + const ruleRemoved = this.model.removePolicy(sec, ptype, rule); + if (!ruleRemoved) { + return ruleRemoved; + } + + if (this.adapter !== null && this.autoSave) { + try { + await this.adapter.removePolicy(sec, ptype, rule); + } catch (e) { + if (e.toString() !== 'not implemented') { + throw e; + } + } + + if (this.watcher !== null) { + // error intentionally ignored + this.watcher.update(); + } + } + + return ruleRemoved; + } + + /** + * removeFilteredPolicyInternal removes rules based on field filters from the current policy. + */ + public async removeFilteredPolicyInternal(sec: string, ptype: string, fieldIndex: number, fieldValues: string[]): Promise { + const ruleRemoved = this.model.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); + if (!ruleRemoved) { + return ruleRemoved; + } + + if (this.adapter !== null && this.autoSave) { + try { + await this.adapter.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); + } catch (e) { + if (e.toString() !== 'not implemented') { + throw e; + } + } + + if (this.watcher !== null) { + // error intentionally ignored + this.watcher.update(); + } + } + + return ruleRemoved; + } +} From 4c872fa73123514a13a204efc771ece52a5e3b34 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:25:05 +0800 Subject: [PATCH 187/497] Initialize CoreEnforcer.adapter to null. --- src/coreEnforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 06ed18dc..db36802a 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -30,7 +30,7 @@ export class CoreEnforcer { protected fm: FunctionMap; private eft: Effector; - protected adapter: FilteredAdapter | Adapter; + protected adapter: FilteredAdapter | Adapter | null = null; protected watcher: Watcher | null = null; private rm: RoleManager; From 01be47a218d48f47502c6e392f0b1b1421346b42 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:26:04 +0800 Subject: [PATCH 188/497] Add missing await to enforcer's test. --- test/enforcer.test.ts | 48 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 91403d91..a6aa2cbf 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -61,7 +61,7 @@ test('TestKeyMatchModelInMemory', async () => { testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); e = await Enforcer.newEnforcer(m); - a.loadPolicy(e.getModel()); + await a.loadPolicy(e.getModel()); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -110,7 +110,7 @@ test('TestRBACModelInMemoryIndeterminate', async () => { const e = await Enforcer.newEnforcer(m); - e.addPermissionForUser('alice', 'data1', 'invalid'); + await e.addPermissionForUser('alice', 'data1', 'invalid'); testEnforce(e, 'alice', 'data1', 'read', false); }); @@ -125,11 +125,11 @@ test('TestRBACModelInMemory', async () => { const e = await Enforcer.newEnforcer(m); - e.addPermissionForUser('alice', 'data1', 'read'); - e.addPermissionForUser('bob', 'data2', 'write'); - e.addPermissionForUser('data2_admin', 'data2', 'read'); - e.addPermissionForUser('data2_admin', 'data2', 'write'); - e.addRoleForUser('alice', 'data2_admin'); + await e.addPermissionForUser('alice', 'data1', 'read'); + await e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('data2_admin', 'data2', 'read'); + await e.addPermissionForUser('data2_admin', 'data2', 'write'); + await e.addRoleForUser('alice', 'data2_admin'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -166,11 +166,11 @@ m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act const e = await Enforcer.newEnforcer(m); - e.addPermissionForUser('alice', 'data1', 'read'); - e.addPermissionForUser('bob', 'data2', 'write'); - e.addPermissionForUser('data2_admin', 'data2', 'read'); - e.addPermissionForUser('data2_admin', 'data2', 'write'); - e.addRoleForUser('alice', 'data2_admin'); + await e.addPermissionForUser('alice', 'data1', 'read'); + await e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('data2_admin', 'data2', 'read'); + await e.addPermissionForUser('data2_admin', 'data2', 'write'); + await e.addRoleForUser('alice', 'data2_admin'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -192,8 +192,8 @@ test('TestNotUsedRBACModelInMemory', async () => { const e = await Enforcer.newEnforcer(m); - e.addPermissionForUser('alice', 'data1', 'read'); - e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('alice', 'data1', 'read'); + await e.addPermissionForUser('bob', 'data2', 'write'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -208,7 +208,7 @@ test('TestNotUsedRBACModelInMemory', async () => { test('TestMatcherUsingInOperator', async () => { // From file config const e = await Enforcer.newEnforcer('examples/rbac_model_matcher_using_in_op.conf'); - e.addPermissionForUser('alice', 'data1', 'read'); + await e.addPermissionForUser('alice', 'data1', 'read'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data2', 'read', true); @@ -221,14 +221,14 @@ test('TestMatcherUsingInOperator', async () => { test('TestReloadPolicy', async () => { const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); - e.loadPolicy(); + await e.loadPolicy(); testGetPolicy(e, [['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); }); test('TestSavePolicy', async () => { const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); - e.savePolicy(); + await e.savePolicy(); }); test('TestClearPolicy', async () => { @@ -293,9 +293,9 @@ test('TestEnableAutoSave', async () => { e.enableAutoSave(false); // Because AutoSave is disabled, the policy change only affects the policy in Casbin enforcer, // it doesn't affect the policy in the storage. - e.removePolicy('alice', 'data1', 'read'); + await e.removePolicy('alice', 'data1', 'read'); // Reload the policy from the storage to see the effect. - e.loadPolicy(); + await e.loadPolicy(); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); testEnforce(e, 'alice', 'data2', 'read', false); @@ -308,12 +308,12 @@ test('TestEnableAutoSave', async () => { e.enableAutoSave(true); // Because AutoSave is enabled, the policy change not only affects the policy in Casbin enforcer, // but also affects the policy in the storage. - e.removePolicy('alice', 'data1', 'read'); + await e.removePolicy('alice', 'data1', 'read'); // However, the file adapter doesn't implement the AutoSave feature, so enabling it has no effect at all here. // Reload the policy from the storage to see the effect. - e.loadPolicy(); + await e.loadPolicy(); testEnforce(e, 'alice', 'data1', 'read', true); // Will not be false here. testEnforce(e, 'alice', 'data1', 'write', false); testEnforce(e, 'alice', 'data2', 'read', false); @@ -365,7 +365,7 @@ test('TestGetAndSetAdapterInMem', async () => { const a2 = e2.getAdapter(); e.setAdapter(a2); - e.loadPolicy(); + await e.loadPolicy(); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', true); @@ -378,7 +378,7 @@ test('TestSetAdapterFromFile', async () => { const a = new FileAdapter('examples/basic_policy.csv'); e.setAdapter(a); - e.loadPolicy(); + await e.loadPolicy(); testEnforce(e, 'alice', 'data1', 'read', true); }); @@ -396,7 +396,7 @@ test('TestInitEmpty', async () => { e.setModel(m); e.setAdapter(a); - e.loadPolicy(); + await e.loadPolicy(); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); }); From 43757a19b593117320f74eb8b8d133405c030ca5 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:31:36 +0800 Subject: [PATCH 189/497] Fix a bug in Mgmt API's addNamedGroupingPolicy(). --- src/enforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index d80ad56e..e89bd610 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -439,7 +439,7 @@ export class Enforcer extends InternalEnforcer { * @return succeeds or not. */ public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - const ruleadded = await this.addPolicy('g', ptype, ...params); + const ruleadded = await this.addPolicyInternal('g', ptype, params); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); From e4a83590a8edb0069822085b480f8fca5d661833 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:33:01 +0800 Subject: [PATCH 190/497] Improve the code format of the file adapter. --- src/persist/fileAdapter.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 0427a5af..e70fb73c 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -38,13 +38,6 @@ export class FileAdapter implements Adapter { }); } - /** - * addPolicy adds a policy rule to the storage. - */ - public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { - throw new Error('not implemented'); - } - /** * savePolicy saves all policy rules to the storage. */ @@ -87,6 +80,13 @@ export class FileAdapter implements Adapter { await writeFile(this.filePath, text); } + /** + * addPolicy adds a policy rule to the storage. + */ + public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { + throw new Error('not implemented'); + } + /** * removePolicy removes a policy rule from the storage. */ From 31aa24ad55956c408a7c2cdfc2d79dfa4a405258 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:36:05 +0800 Subject: [PATCH 191/497] Handle adapter's "not implemented" error in correct way. --- src/internalEnforcer.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 23410177..a30ca246 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -31,7 +31,7 @@ export class InternalEnforcer extends CoreEnforcer { try { await this.adapter.addPolicy(sec, ptype, rule); } catch (e) { - if (e.toString() !== 'not implemented') { + if (e.message !== 'not implemented') { throw e; } } @@ -58,7 +58,7 @@ export class InternalEnforcer extends CoreEnforcer { try { await this.adapter.removePolicy(sec, ptype, rule); } catch (e) { - if (e.toString() !== 'not implemented') { + if (e.message !== 'not implemented') { throw e; } } @@ -85,7 +85,7 @@ export class InternalEnforcer extends CoreEnforcer { try { await this.adapter.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); } catch (e) { - if (e.toString() !== 'not implemented') { + if (e.message !== 'not implemented') { throw e; } } From 7037f5665098851b77b6d52080a946f84eef42f0 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:39:07 +0800 Subject: [PATCH 192/497] Do not support "in" operator and multi-line matcher now. --- examples/rbac_model_in_multi_line.conf | 15 --------------- examples/rbac_model_matcher_using_in_op.conf | 14 -------------- test/enforcer.test.ts | 13 ------------- 3 files changed, 42 deletions(-) delete mode 100644 examples/rbac_model_in_multi_line.conf delete mode 100644 examples/rbac_model_matcher_using_in_op.conf diff --git a/examples/rbac_model_in_multi_line.conf b/examples/rbac_model_in_multi_line.conf deleted file mode 100644 index 17771b67..00000000 --- a/examples/rbac_model_in_multi_line.conf +++ /dev/null @@ -1,15 +0,0 @@ -[request_definition] -r = sub, obj, act - -[policy_definition] -p = sub, obj, act - -[role_definition] -g = _, _ - -[policy_effect] -e = some(where (p.eft == allow)) - -[matchers] -m = g(r.sub, p.sub) && r.obj == p.obj \ - && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_model_matcher_using_in_op.conf b/examples/rbac_model_matcher_using_in_op.conf deleted file mode 100644 index 227d1494..00000000 --- a/examples/rbac_model_matcher_using_in_op.conf +++ /dev/null @@ -1,14 +0,0 @@ -[request_definition] -r = sub, obj, act - -[policy_definition] -p = sub, obj, act - -[role_definition] -g = _, _ - -[policy_effect] -e = some(where (p.eft == allow)) - -[matchers] -m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3') \ No newline at end of file diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index a6aa2cbf..d6b85b60 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -205,19 +205,6 @@ test('TestNotUsedRBACModelInMemory', async () => { testEnforce(e, 'bob', 'data2', 'write', true); }); -test('TestMatcherUsingInOperator', async () => { -// From file config - const e = await Enforcer.newEnforcer('examples/rbac_model_matcher_using_in_op.conf'); - await e.addPermissionForUser('alice', 'data1', 'read'); - - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data2', 'read', true); - testEnforce(e, 'alice', 'data3', 'read', true); - testEnforce(e, 'anyone', 'data1', 'read', false); - testEnforce(e, 'anyone', 'data2', 'read', true); - testEnforce(e, 'anyone', 'data3', 'read', true); -}); - test('TestReloadPolicy', async () => { const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); From f1ace5241288afe98a12d6060e00cdf10d7b8262 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:42:54 +0800 Subject: [PATCH 193/497] Fix file adapter's savePolicy() bug. --- src/persist/fileAdapter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index e70fb73c..7845ae57 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -55,7 +55,7 @@ export class FileAdapter implements Adapter { pList.forEach(n => { n.policy.forEach(m => { result += n.key + ', '; - result += arrayToString([...m.values()]); + result += arrayToString(m); result += '\n'; }); }); @@ -67,7 +67,7 @@ export class FileAdapter implements Adapter { gList.forEach(n => { n.policy.forEach(m => { result += n.key + ', '; - result += arrayToString([...m.values()]); + result += arrayToString(m); result += '\n'; }); }); From 1d7fef5097f3f0021136bfdea9b01bfc59772762 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:46:44 +0800 Subject: [PATCH 194/497] Make CoreEnforcer.enableLog() an instance method. --- src/coreEnforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index db36802a..5ad3ddb4 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -230,7 +230,7 @@ export class CoreEnforcer { * * @param enable whether to enable Casbin's log. */ - public static enableLog(enable: boolean): void { + public enableLog(enable: boolean): void { setEnableLog(enable); } From d655ad5ebfc333b389ba3bd3d2f5994f333391e6 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:51:52 +0800 Subject: [PATCH 195/497] Refactor out ManagementEnforcer from Enforcer class. --- src/enforcer.ts | 402 +------------------------------------ src/managementEnforcer.ts | 413 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 418 insertions(+), 397 deletions(-) create mode 100644 src/managementEnforcer.ts diff --git a/src/enforcer.ts b/src/enforcer.ts index e89bd610..48512aab 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -12,12 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { InternalEnforcer } from './internalEnforcer'; +import { ManagementEnforcer } from './managementEnforcer'; import { FunctionMap, Model } from './model'; import { Adapter, FileAdapter } from './persist'; import { setEnableLog } from './util'; -export class Enforcer extends InternalEnforcer { +/** + * Enforcer = ManagementEnforcer + RBAC API. + */ +export class Enforcer extends ManagementEnforcer { /** * newEnforcer creates an enforcer via file or DB. * @@ -118,401 +121,6 @@ export class Enforcer extends InternalEnforcer { } } - // **************Management API************* - /** - * getAllSubjects gets the list of subjects that show up in the current policy. - * - * @return all the subjects in "p" policy rules. It actually collects the - * 0-index elements of "p" policy rules. So make sure your subject - * is the 0-index element, like (sub, obj, act). Duplicates are removed. - */ - public getAllSubjects(): string[] { - return this.getAllNamedSubjects('p'); - } - - /** - * getAllNamedSubjects gets the list of subjects that show up in the currentnamed policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return all the subjects in policy rules of the ptype type. It actually - * collects the 0-index elements of the policy rules. So make sure - * your subject is the 0-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public getAllNamedSubjects(ptype: string): string[] { - return this.model.getValuesForFieldInPolicy('p', ptype, 0); - } - - /** - * getAllObjects gets the list of objects that show up in the current policy. - * - * @return all the objects in "p" policy rules. It actually collects the - * 1-index elements of "p" policy rules. So make sure your object - * is the 1-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public getAllObjects(): string[] { - return this.getAllNamedObjects('p'); - } - - /** - * getAllNamedObjects gets the list of objects that show up in the current named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return all the objects in policy rules of the ptype type. It actually - * collects the 1-index elements of the policy rules. So make sure - * your object is the 1-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public getAllNamedObjects(ptype: string): string[] { - return this.model.getValuesForFieldInPolicy('p', ptype, 1); - } - - /** - * getAllActions gets the list of actions that show up in the current policy. - * - * @return all the actions in "p" policy rules. It actually collects - * the 2-index elements of "p" policy rules. So make sure your action - * is the 2-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public getAllActions(): string[] { - return this.getAllNamedActions('p'); - } - - /** - * GetAllNamedActions gets the list of actions that show up in the current named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return all the actions in policy rules of the ptype type. It actually - * collects the 2-index elements of the policy rules. So make sure - * your action is the 2-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public getAllNamedActions(ptype: string): string[] { - return this.model.getValuesForFieldInPolicy('p', ptype, 2); - } - - /** - * getAllRoles gets the list of roles that show up in the current policy. - * - * @return all the roles in "g" policy rules. It actually collects - * the 1-index elements of "g" policy rules. So make sure your - * role is the 1-index element, like (sub, role). - * Duplicates are removed. - */ - public getAllRoles(): string[] { - return this.getAllNamedRoles('g'); - } - - /** - * getAllNamedRoles gets the list of roles that show up in the current named policy. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @return all the subjects in policy rules of the ptype type. It actually - * collects the 0-index elements of the policy rules. So make - * sure your subject is the 0-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public getAllNamedRoles(ptype: string): string[] { - return this.model.getValuesForFieldInPolicy('g', ptype, 1); - } - - /** - * getPolicy gets all the authorization rules in the policy. - * - * @return all the "p" policy rules. - */ - public getPolicy(): string[][] { - return this.getNamedPolicy('p'); - } - - /** - * getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return the filtered "p" policy rules. - */ - public getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { - return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); - } - - /** - * getNamedPolicy gets all the authorization rules in the named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return the "p" policy rules of the specified ptype. - */ - public getNamedPolicy(ptype: string): string[][] { - return this.model.getPolicy('p', ptype); - } - - /** - * getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return the filtered "p" policy rules of the specified ptype. - */ - public getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { - return this.model.getFilteredPolicy('p', ptype, fieldIndex, ...fieldValues); - } - - /** - * getGroupingPolicy gets all the role inheritance rules in the policy. - * - * @return all the "g" policy rules. - */ - public getGroupingPolicy(): string[][] { - return this.getNamedGroupingPolicy('g'); - } - - /** - * getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" means not to match this field. - * @return the filtered "g" policy rules. - */ - public getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { - return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); - } - - /** - * getNamedGroupingPolicy gets all the role inheritance rules in the policy. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @return the "g" policy rules of the specified ptype. - */ - public getNamedGroupingPolicy(ptype: string): string[][] { - return this.model.getPolicy('g', ptype); - } - - /** - * getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return the filtered "g" policy rules of the specified ptype. - */ - public getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { - return this.model.getFilteredPolicy('g', ptype, fieldIndex, ...fieldValues); - } - - /** - * hasPolicy determines whether an authorization rule exists. - * - * @param params the "p" policy rule, ptype "p" is implicitly used. - * @return whether the rule exists. - */ - public hasPolicy(...params: string[]): boolean { - return this.hasNamedPolicy('p', ...params); - } - - /** - * hasNamedPolicy determines whether a named authorization rule exists. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param params the "p" policy rule. - * @return whether the rule exists. - */ - public hasNamedPolicy(ptype: string, ...params: string[]): boolean { - return this.model.hasPolicy('p', ptype, params); - } - - /** - * addPolicy adds an authorization rule to the current policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param params the "p" policy rule, ptype "p" is implicitly used. - * @return succeeds or not. - */ - public async addPolicy(...params: string[]): Promise { - return this.addNamedPolicy('p', ...params); - } - - /** - * addNamedPolicy adds an authorization rule to the current named policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param params the "p" policy rule. - * @return succeeds or not. - */ - public async addNamedPolicy(ptype: string, ...params: string[]): Promise { - return await this.addPolicyInternal('p', ptype, params); - } - - /** - * removePolicy removes an authorization rule from the current policy. - * - * @param params the "p" policy rule, ptype "p" is implicitly used. - * @return succeeds or not. - */ - public async removePolicy(...params: string[]): Promise { - return await this.removeNamedPolicy('p', ...params); - } - - /** - * removeFilteredPolicy removes an authorization rule from the current policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return await this.removeFilteredNamedPolicy('p', fieldIndex, fieldValues); - } - - /** - * removeNamedPolicy removes an authorization rule from the current named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param params the "p" policy rule. - * @return succeeds or not. - */ - public async removeNamedPolicy(ptype: string, ...params: string[]): Promise { - return await this.removePolicyInternal('p', ptype, params); - } - - /** - * removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): Promise { - return await this.removeFilteredPolicyInternal('p', ptype, fieldIndex, fieldValues); - } - - /** - * hasGroupingPolicy determines whether a role inheritance rule exists. - * - * @param params the "g" policy rule, ptype "g" is implicitly used. - * @return whether the rule exists. - */ public hasGroupingPolicy(...params: string[]): boolean { - return this.hasNamedGroupingPolicy('g', ...params); - } - - /** - * hasNamedGroupingPolicy determines whether a named role inheritance rule exists. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param params the "g" policy rule. - * @return whether the rule exists. - */ - public hasNamedGroupingPolicy(ptype: string, ...params: string[]): boolean { - return this.model.hasPolicy('g', ptype, params); - } - - /** - * addGroupingPolicy adds a role inheritance rule to the current policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param params the "g" policy rule, ptype "g" is implicitly used. - * @return succeeds or not. - */ - public async addGroupingPolicy(...params: string[]): Promise { - return await this.addNamedGroupingPolicy('g', ...params); - } - - /** - * addNamedGroupingPolicy adds a named role inheritance rule to the current policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param params the "g" policy rule. - * @return succeeds or not. - */ - public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - const ruleadded = await this.addPolicyInternal('g', ptype, params); - - if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); - } - - return ruleadded; - } - - /** - * removeGroupingPolicy removes a role inheritance rule from the current policy. - * - * @param params the "g" policy rule, ptype "g" is implicitly used. - * @return succeeds or not. - */ - public async removeGroupingPolicy(...params: string[]): Promise { - return await this.removeNamedGroupingPolicy('g', ...params); - } - - /** - * removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return await this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); - } - - /** - * removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param params the "g" policy rule. - * @return succeeds or not. - */ - public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - const ruleRemoved = await this.removePolicy('g', ptype, ...params); - - if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); - } - return ruleRemoved; - } - - /** - * removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - const ruleRemoved = await this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); - if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); - } - return ruleRemoved; - } - - /** - * addFunction adds a customized function. - * @param name custom function name - * @param func function - */ - public addFunction(name: string, func: any): void { - this.fm.addFunction(name, func); - } - - // **************RBAC API************* /** * getRolesForUser gets the roles that a user has. * diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts new file mode 100644 index 00000000..4b6887b4 --- /dev/null +++ b/src/managementEnforcer.ts @@ -0,0 +1,413 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { InternalEnforcer } from './internalEnforcer'; + +/** + * ManagementEnforcer = InternalEnforcer + Management API. + */ +export class ManagementEnforcer extends InternalEnforcer { + /** + * getAllSubjects gets the list of subjects that show up in the current policy. + * + * @return all the subjects in "p" policy rules. It actually collects the + * 0-index elements of "p" policy rules. So make sure your subject + * is the 0-index element, like (sub, obj, act). Duplicates are removed. + */ + public getAllSubjects(): string[] { + return this.getAllNamedSubjects('p'); + } + + /** + * getAllNamedSubjects gets the list of subjects that show up in the currentnamed policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make sure + * your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public getAllNamedSubjects(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('p', ptype, 0); + } + + /** + * getAllObjects gets the list of objects that show up in the current policy. + * + * @return all the objects in "p" policy rules. It actually collects the + * 1-index elements of "p" policy rules. So make sure your object + * is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public getAllObjects(): string[] { + return this.getAllNamedObjects('p'); + } + + /** + * getAllNamedObjects gets the list of objects that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the objects in policy rules of the ptype type. It actually + * collects the 1-index elements of the policy rules. So make sure + * your object is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public getAllNamedObjects(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('p', ptype, 1); + } + + /** + * getAllActions gets the list of actions that show up in the current policy. + * + * @return all the actions in "p" policy rules. It actually collects + * the 2-index elements of "p" policy rules. So make sure your action + * is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public getAllActions(): string[] { + return this.getAllNamedActions('p'); + } + + /** + * GetAllNamedActions gets the list of actions that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the actions in policy rules of the ptype type. It actually + * collects the 2-index elements of the policy rules. So make sure + * your action is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public getAllNamedActions(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('p', ptype, 2); + } + + /** + * getAllRoles gets the list of roles that show up in the current policy. + * + * @return all the roles in "g" policy rules. It actually collects + * the 1-index elements of "g" policy rules. So make sure your + * role is the 1-index element, like (sub, role). + * Duplicates are removed. + */ + public getAllRoles(): string[] { + return this.getAllNamedRoles('g'); + } + + /** + * getAllNamedRoles gets the list of roles that show up in the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make + * sure your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public getAllNamedRoles(ptype: string): string[] { + return this.model.getValuesForFieldInPolicy('g', ptype, 1); + } + + /** + * getPolicy gets all the authorization rules in the policy. + * + * @return all the "p" policy rules. + */ + public getPolicy(): string[][] { + return this.getNamedPolicy('p'); + } + + /** + * getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules. + */ + public getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { + return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); + } + + /** + * getNamedPolicy gets all the authorization rules in the named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return the "p" policy rules of the specified ptype. + */ + public getNamedPolicy(ptype: string): string[][] { + return this.model.getPolicy('p', ptype); + } + + /** + * getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules of the specified ptype. + */ + public getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { + return this.model.getFilteredPolicy('p', ptype, fieldIndex, ...fieldValues); + } + + /** + * getGroupingPolicy gets all the role inheritance rules in the policy. + * + * @return all the "g" policy rules. + */ + public getGroupingPolicy(): string[][] { + return this.getNamedGroupingPolicy('g'); + } + + /** + * getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" means not to match this field. + * @return the filtered "g" policy rules. + */ + public getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { + return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + /** + * getNamedGroupingPolicy gets all the role inheritance rules in the policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return the "g" policy rules of the specified ptype. + */ + public getNamedGroupingPolicy(ptype: string): string[][] { + return this.model.getPolicy('g', ptype); + } + + /** + * getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "g" policy rules of the specified ptype. + */ + public getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { + return this.model.getFilteredPolicy('g', ptype, fieldIndex, ...fieldValues); + } + + /** + * hasPolicy determines whether an authorization rule exists. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return whether the rule exists. + */ + public hasPolicy(...params: string[]): boolean { + return this.hasNamedPolicy('p', ...params); + } + + /** + * hasNamedPolicy determines whether a named authorization rule exists. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return whether the rule exists. + */ + public hasNamedPolicy(ptype: string, ...params: string[]): boolean { + return this.model.hasPolicy('p', ptype, params); + } + + /** + * addPolicy adds an authorization rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async addPolicy(...params: string[]): Promise { + return this.addNamedPolicy('p', ...params); + } + + /** + * addNamedPolicy adds an authorization rule to the current named policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ + public async addNamedPolicy(ptype: string, ...params: string[]): Promise { + return await this.addPolicyInternal('p', ptype, params); + } + + /** + * removePolicy removes an authorization rule from the current policy. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async removePolicy(...params: string[]): Promise { + return await this.removeNamedPolicy('p', ...params); + } + + /** + * removeFilteredPolicy removes an authorization rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return await this.removeFilteredNamedPolicy('p', fieldIndex, fieldValues); + } + + /** + * removeNamedPolicy removes an authorization rule from the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ + public async removeNamedPolicy(ptype: string, ...params: string[]): Promise { + return await this.removePolicyInternal('p', ptype, params); + } + + /** + * removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): Promise { + return await this.removeFilteredPolicyInternal('p', ptype, fieldIndex, fieldValues); + } + + /** + * hasGroupingPolicy determines whether a role inheritance rule exists. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return whether the rule exists. + */ public hasGroupingPolicy(...params: string[]): boolean { + return this.hasNamedGroupingPolicy('g', ...params); + } + + /** + * hasNamedGroupingPolicy determines whether a named role inheritance rule exists. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return whether the rule exists. + */ + public hasNamedGroupingPolicy(ptype: string, ...params: string[]): boolean { + return this.model.hasPolicy('g', ptype, params); + } + + /** + * addGroupingPolicy adds a role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async addGroupingPolicy(...params: string[]): Promise { + return await this.addNamedGroupingPolicy('g', ...params); + } + + /** + * addNamedGroupingPolicy adds a named role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ + public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + const ruleadded = await this.addPolicyInternal('g', ptype, params); + + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + + return ruleadded; + } + + /** + * removeGroupingPolicy removes a role inheritance rule from the current policy. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async removeGroupingPolicy(...params: string[]): Promise { + return await this.removeNamedGroupingPolicy('g', ...params); + } + + /** + * removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return await this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + /** + * removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ + public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + const ruleRemoved = await this.removePolicy('g', ptype, ...params); + + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + return ruleRemoved; + } + + /** + * removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + const ruleRemoved = await this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); + if (this.autoBuildRoleLinks) { + this.buildRoleLinks(); + } + return ruleRemoved; + } + + /** + * addFunction adds a customized function. + * @param name custom function name + * @param func function + */ + public addFunction(name: string, func: any): void { + this.fm.addFunction(name, func); + } +} From 8f0315c62a4167c497723bccce4240bdf52cdb10 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 13:57:25 +0800 Subject: [PATCH 196/497] Use @ts-ignore to allow null adapter and watcher. --- src/coreEnforcer.ts | 7 +++++-- src/enforcer.ts | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 5ad3ddb4..7f41b397 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -30,8 +30,10 @@ export class CoreEnforcer { protected fm: FunctionMap; private eft: Effector; - protected adapter: FilteredAdapter | Adapter | null = null; - protected watcher: Watcher | null = null; + // @ts-ignore + protected adapter: FilteredAdapter | Adapter = null; + // @ts-ignore + protected watcher: Watcher = null; private rm: RoleManager; private enabled: boolean; @@ -41,6 +43,7 @@ export class CoreEnforcer { public initialize(): void { this.rm = new DefaultRoleManager(10); this.eft = new DefaultEffector(); + // @ts-ignore this.watcher = null; this.enabled = true; diff --git a/src/enforcer.ts b/src/enforcer.ts index 48512aab..8d0bcee2 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -67,6 +67,7 @@ export class Enforcer extends ManagementEnforcer { if (typeof params[0] === 'string') { await e.initWithFile(params[0], ''); } else { + // @ts-ignore await e.initWithModelAndAdapter(params[0], null); } } else if (params.length === parsedParamLen) { From 2b3ff914d7999d74ef24266d5e9791d2ad6f2be1 Mon Sep 17 00:00:00 2001 From: Chalin-Shi <18875906195@163.com> Date: Sat, 25 Aug 2018 21:59:13 +0800 Subject: [PATCH 197/497] :bug: fix 2 array equals' bug --- src/model/model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/model.ts b/src/model/model.ts index b696988a..ab222318 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -170,7 +170,7 @@ export class Model { if (!ast) { return false; } - return ast.policy.some((n: string[]) => n === rule); + return ast.policy.some((n: string[]) => util.arrayEquals(n, rule)); } // addPolicy adds a policy rule to the model. From dde714ea90ca5cb53667431ddb25477e5ae2a1e5 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 27 Aug 2018 15:52:53 +0800 Subject: [PATCH 198/497] Bump to v1.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0147ff29..f7a2d1a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.1", + "version": "1.1.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From d180ddc4470e5ccf408e11cc2baad2f3f8035e7f Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 17 Oct 2018 08:21:38 +0800 Subject: [PATCH 199/497] Add Waterline Adapter to README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3b910610..b44345d1 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,7 @@ Adapter | Type | Author | Description ----|------|----|---- [File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | node-casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files [Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) +[Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence From 732f5ccf8ea5ff5f6455d285968e0f478737fa75 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 17 Oct 2018 08:24:48 +0800 Subject: [PATCH 200/497] Add TypeORM Adapter to README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b44345d1..8f85c762 100644 --- a/README.md +++ b/README.md @@ -184,6 +184,7 @@ Adapter | Type | Author | Description [File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | node-casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files [Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) [Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) +[TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence From d4b6b21dfbaa85496401592a1499dd011af9900d Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 19 Oct 2018 23:10:47 +0800 Subject: [PATCH 201/497] Update documentation in README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f85c762..794950d7 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ What node-casbin does NOT do: ## Documentation -For documentation, please see: [Our Wiki](https://github.com/casbin/casbin/wiki) +https://casbin.org/docs/en/overview ## Online editor From 34901c4a6d8592a40c4dbe412a6b23233e73193f Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 19 Oct 2018 23:11:16 +0800 Subject: [PATCH 202/497] Redirect tutorials to website in README. --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 794950d7..31879238 100644 --- a/README.md +++ b/README.md @@ -157,10 +157,7 @@ You can also use the online editor (http://casbin.org/editor/) to write your nod ## Tutorials -- [Basic Role-Based HTTP Authorization in Go with Casbin](https://zupzup.org/casbin-http-role-auth) (or [Chinese translation](https://studygolang.com/articles/12323)) -- [Using Casbin with Beego: 1. Get started and test (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78460385) -- [Using Casbin with Beego: 2. Policy storage (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78571240) -- [Using Casbin with Beego: 3. Policy query (in Chinese)](http://blog.csdn.net/hotqin888/article/details/78992250) +https://casbin.org/docs/en/tutorials ## Policy management From 927b7cf908026ce9a86b4a1bfd4d3f17e0a7d1ca Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 19 Oct 2018 23:12:21 +0800 Subject: [PATCH 203/497] Update php-casbin's link in README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31879238..7687d1f4 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ See [Policy management APIs](#policy-management) for more usage. - Golang: [Casbin](https://github.com/casbin/casbin) (production-ready) - Java: [jCasbin](https://github.com/casbin/jcasbin) (production-ready) - Node.js: [node-casbin](https://github.com/casbin/node-casbin) (production-ready) -- PHP: [PHP-Casbin](https://github.com/sstutz/php-casbin) (experimental) +- PHP: [PHP-Casbin](https://github.com/php-casbin/php-casbin) (experimental) - C++: xCasbin (WIP) ## Table of contents From b80b66fa75b7fdc9d5fdd20f1bef8aaf3c90081c Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 31 Oct 2018 23:21:53 +0800 Subject: [PATCH 204/497] The function removeGroupingPolicy() works now, fix: https://github.com/casbin/node-casbin/issues/24 --- src/managementEnforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index 4b6887b4..a9dc83b2 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -377,7 +377,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - const ruleRemoved = await this.removePolicy('g', ptype, ...params); + const ruleRemoved = await this.removePolicyInternal('g', ptype, params); if (this.autoBuildRoleLinks) { this.buildRoleLinks(); From e876217bcf4e352fc73bd98949c74812661c0e47 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 31 Oct 2018 23:52:11 +0800 Subject: [PATCH 205/497] Add optional param "domain" to addRoleForUser() and deleteRoleForUser(). --- src/enforcer.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 8d0bcee2..62be60c2 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -174,10 +174,15 @@ export class Enforcer extends ManagementEnforcer { * * @param user the user. * @param role the role. + * @param domain the domain. * @return succeeds or not. */ - public async addRoleForUser(user: string, role: string): Promise { - return await this.addGroupingPolicy(user, role); + public async addRoleForUser(user: string, role: string, domain?: string): Promise { + if (domain == null) { + return await this.addGroupingPolicy(user, role); + } else { + return await this.addGroupingPolicy(user, role, domain); + } } /** @@ -186,10 +191,15 @@ export class Enforcer extends ManagementEnforcer { * * @param user the user. * @param role the role. + * @param domain the domain. * @return succeeds or not. */ - public async deleteRoleForUser(user: string, role: string): Promise { - return await this.removeGroupingPolicy(user, role); + public async deleteRoleForUser(user: string, role: string, domain?: string): Promise { + if (domain == null) { + return await this.removeGroupingPolicy(user, role); + } else { + return await this.removeGroupingPolicy(user, role, domain); + } } /** From 290355f9c411d7ca929c2a2752a379729e6ba4b0 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 1 Nov 2018 00:07:32 +0800 Subject: [PATCH 206/497] Add optional param "domain" to getRolesForUser(), getUsersForRole() and hasRoleForUser(). --- src/enforcer.ts | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 62be60c2..7e0cfb74 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -126,26 +126,34 @@ export class Enforcer extends ManagementEnforcer { * getRolesForUser gets the roles that a user has. * * @param name the user. + * @param domain the domain. * @return the roles that the user has. */ - public getRolesForUser(name: string): string[] { + public getRolesForUser(name: string, domain?: string): string[] { // @ts-ignore const rm = this.model.model.get('g').get('g').rm; - const result = rm.getRoles(name); - return result; + if (domain == null) { + return rm.getRoles(name); + } else { + return rm.getRoles(name, domain); + } } /** * getUsersForRole gets the users that has a role. * * @param name the role. + * @param domain the domain. * @return the users that has the role. */ - public getUsersForRole(name: string): string[] { + public getUsersForRole(name: string, domain?: string): string[] { // @ts-ignore const rm = this.model.model.get('g').get('g').rm; - const result = rm.getUsers(name); - return result; + if (domain == null) { + return rm.getUsers(name); + } else { + return rm.getUsers(name, domain); + } } /** @@ -153,10 +161,11 @@ export class Enforcer extends ManagementEnforcer { * * @param name the user. * @param role the role. + * @param domain the domain. * @return whether the user has the role. */ - public hasRoleForUser(name: string, role: string): boolean { - const roles = this.getRolesForUser(name); + public hasRoleForUser(name: string, role: string, domain?: string): boolean { + const roles = this.getRolesForUser(name, domain); let hasRole: boolean = false; for (const r of roles) { if (r === role) { From a661e3df337ddc70999d84f49f394eb2f12d7a27 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 1 Nov 2018 19:04:36 +0800 Subject: [PATCH 207/497] Bump to v1.1.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f7a2d1a4..e7fd49b8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.2", + "version": "1.1.4", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From bf656cc20a7b78b6c38882ec905dfbdd0e3c70c3 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 1 Nov 2018 23:01:56 +0800 Subject: [PATCH 208/497] Fix the "domain" param support in getUsersForRole(). --- src/rbac/defaultRoleManager.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 6250f2d1..da517c5c 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -106,6 +106,12 @@ export class DefaultRoleManager implements RoleManager { * domain is an unreferenced parameter here, may be used in other implementations. */ public getUsers(name: string, ...domain: string[]): string[] { + if (domain.length === 1) { + name = domain[0] + '::' + name; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + if (!this.hasRole(name)) { throw new Error('error: name does not exist'); } From cbc1a782a3bc34e8a4acc3f3a502d5124e7dfc78 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 2 Nov 2018 17:07:53 +0800 Subject: [PATCH 209/497] Remove "domain::" prefix for getUsersForRole() if exists. --- src/rbac/defaultRoleManager.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index da517c5c..57a7dd6d 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -116,9 +116,13 @@ export class DefaultRoleManager implements RoleManager { throw new Error('error: name does not exist'); } - return [...this.allRoles.values()] + let users = [...this.allRoles.values()] .filter(n => n.hasDirectRole(name)) .map(n => n.name); + if (domain.length === 1) { + users = users.map(n => n.substring(domain[0].length + 2, n.length)); + } + return users; } /** From 36b64a7444f4dfce3877c64c54d5bbfed8df28d1 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 2 Nov 2018 21:48:08 +0800 Subject: [PATCH 210/497] Bump to v1.1.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e7fd49b8..461cad44 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.4", + "version": "1.1.5", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From 79751ce50295aa1820f52066e6e7ad7f74eae63d Mon Sep 17 00:00:00 2001 From: Satish Malireddi Date: Sat, 3 Nov 2018 04:45:12 -0700 Subject: [PATCH 211/497] Updated few broken links in Readme --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7687d1f4..af4e2198 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,13 @@ npm install casbin --save ## Get started -1. New a node-casbin enforcer with a model file and a policy file: +1. Initialize a new node-casbin enforcer with a model file and a policy file: ```typescript const enforcer = await Enforcer.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); ``` - -Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#persistence) section for details. + + Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details. 2. Add an enforcement hook into your code right before the access happens: @@ -55,8 +55,8 @@ Note: you can also initialize an enforcer with policy in DB instead of file, see ```typescript const roles = enforcer.getRoles('alice'); ``` - -See [Policy management APIs](#policy-management) for more usage. + + See [Policy management APIs](#policy-management) for more usage. 4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. From 3d984daf55df981594120987d39e21877cb590f1 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 7 Nov 2018 00:13:17 +0800 Subject: [PATCH 212/497] Add logos to supported languages in README. --- README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index af4e2198..0ea01916 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,13 @@ node-casbin node-casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). +## All the languages supported by Casbin: + +![golang](https://casbin.org/docs/assets/langs/golang.png) | ![java](https://casbin.org/docs/assets/langs/java.png) | ![nodejs](https://casbin.org/docs/assets/langs/nodejs.png) | ![php](https://casbin.org/docs/assets/langs/php.png) +----|----|----|---- +[Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) +production-ready | production-ready | production-ready | experimental + ## Installation ``` @@ -60,14 +67,6 @@ npm install casbin --save 4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. -## All the languages supported by node-casbin: - -- Golang: [Casbin](https://github.com/casbin/casbin) (production-ready) -- Java: [jCasbin](https://github.com/casbin/jcasbin) (production-ready) -- Node.js: [node-casbin](https://github.com/casbin/node-casbin) (production-ready) -- PHP: [PHP-Casbin](https://github.com/php-casbin/php-casbin) (experimental) -- C++: xCasbin (WIP) - ## Table of contents - [Supported models](#supported-models) From 90cc2af586fe1f5da1c0847546b0fd5b290cee9b Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Wed, 7 Nov 2018 16:57:22 +0800 Subject: [PATCH 213/497] Add links to language logos in README. --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 0ea01916..a0a8a616 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -node-casbin +node-Casbin ==== [![NPM version][npm-image]][npm-url] [![NPM download][download-image]][download-url] @@ -14,18 +14,18 @@ node-casbin [download-image]: https://img.shields.io/npm/dm/casbin.svg?style=flat-square [download-url]: https://npmjs.org/package/casbin -**News**: still worry about how to write the correct node-casbin policy? ``Casbin online editor`` is coming to help! Try it at: http://casbin.org/editor/ +**News**: still worry about how to write the correct node-Casbin policy? ``Casbin online editor`` is coming to help! Try it at: http://casbin.org/editor/ ![casbin Logo](casbin-logo.png) -node-casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). +node-Casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). ## All the languages supported by Casbin: -![golang](https://casbin.org/docs/assets/langs/golang.png) | ![java](https://casbin.org/docs/assets/langs/java.png) | ![nodejs](https://casbin.org/docs/assets/langs/nodejs.png) | ![php](https://casbin.org/docs/assets/langs/php.png) +[![golang](https://casbin.org/docs/assets/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/docs/assets/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/docs/assets/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/docs/assets/langs/php.png)](https://github.com/php-casbin/php-casbin) ----|----|----|---- -[Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) -production-ready | production-ready | production-ready | experimental +[Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) +production-ready | production-ready | production-ready | production-ready ## Installation @@ -35,7 +35,7 @@ npm install casbin --save ## Get started -1. Initialize a new node-casbin enforcer with a model file and a policy file: +1. Initialize a new node-Casbin enforcer with a model file and a policy file: ```typescript const enforcer = await Enforcer.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); @@ -57,7 +57,7 @@ npm install casbin --save } ``` -3. Besides the static policy file, node-casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: +3. Besides the static policy file, node-Casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: ```typescript const roles = enforcer.getRoles('alice'); @@ -97,9 +97,9 @@ npm install casbin --save ## How it works? -In node-casbin, an access control model is abstracted into a CONF file based on the **PERM metamodel (Policy, Effect, Request, Matchers)**. So switching or upgrading the authorization mechanism for a project is just as simple as modifying a configuration. You can customize your own access control model by combining the available models. For example, you can get RBAC roles and ABAC attributes together inside one model and share one set of policy rules. +In node-Casbin, an access control model is abstracted into a CONF file based on the **PERM metamodel (Policy, Effect, Request, Matchers)**. So switching or upgrading the authorization mechanism for a project is just as simple as modifying a configuration. You can customize your own access control model by combining the available models. For example, you can get RBAC roles and ABAC attributes together inside one model and share one set of policy rules. -The most basic and simplest model in node-casbin is ACL. ACL's model CONF is: +The most basic and simplest model in node-Casbin is ACL. ACL's model CONF is: ```ini # Request definition @@ -133,7 +133,7 @@ It means: ## Features -What node-casbin does: +What node-Casbin does: 1. enforce the policy in the classic ``{subject, object, action}`` form or a customized form as you defined, both allow and deny authorizations are supported. 2. handle the storage of the access control model and its policy. @@ -141,10 +141,10 @@ What node-casbin does: 4. support built-in superuser like ``root`` or ``administrator``. A superuser can do anything without explict permissions. 5. multiple built-in operators to support the rule matching. For example, ``keyMatch`` can map a resource key ``/foo/bar`` to the pattern ``/foo*``. -What node-casbin does NOT do: +What node-Casbin does NOT do: 1. authentication (aka verify ``username`` and ``password`` when a user logs in) -2. manage the list of users or roles. I believe it's more convenient for the project itself to manage these entities. Users usually have their passwords, and node-casbin is not designed as a password container. However, node-casbin stores the user-role mapping for the RBAC scenario. +2. manage the list of users or roles. I believe it's more convenient for the project itself to manage these entities. Users usually have their passwords, and node-Casbin is not designed as a password container. However, node-Casbin stores the user-role mapping for the RBAC scenario. ## Documentation @@ -152,7 +152,7 @@ https://casbin.org/docs/en/overview ## Online editor -You can also use the online editor (http://casbin.org/editor/) to write your node-casbin model and policy in your web browser. It provides functionality such as ``syntax highlighting`` and ``code completion``, just like an IDE for a programming language. +You can also use the online editor (http://casbin.org/editor/) to write your node-Casbin model and policy in your web browser. It provides functionality such as ``syntax highlighting`` and ``code completion``, just like an IDE for a programming language. ## Tutorials @@ -160,9 +160,9 @@ https://casbin.org/docs/en/tutorials ## Policy management -node-casbin provides two sets of APIs to manage permissions: +node-Casbin provides two sets of APIs to manage permissions: -- [Management API](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/main/ManagementEnforcer.java): the primitive API that provides full support for node-casbin policy management. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/ManagementAPIUnitTest.java) for examples. +- [Management API](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/main/ManagementEnforcer.java): the primitive API that provides full support for node-Casbin policy management. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/ManagementAPIUnitTest.java) for examples. - [RBAC API](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/main/Enforcer.java): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/RbacAPIUnitTest.java) for examples. We also provide a web-based UI for model management and policy management: @@ -173,24 +173,24 @@ We also provide a web-based UI for model management and policy management: ## Policy persistence -In node-casbin, the policy storage is implemented as an adapter (aka middleware for node-casbin). To keep light-weight, we don't put adapter code in the main library (except the default file adapter). A complete list of node-casbin adapters is provided as below. Any 3rd-party contribution on a new adapter is welcomed, please inform us and I will put it in this list:) +In node-Casbin, the policy storage is implemented as an adapter (aka middleware for node-Casbin). To keep light-weight, we don't put adapter code in the main library (except the default file adapter). A complete list of node-Casbin adapters is provided as below. Any 3rd-party contribution on a new adapter is welcomed, please inform us and I will put it in this list:) Adapter | Type | Author | Description ----|------|----|---- -[File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | node-casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files -[Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) -[Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) -[TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) +[File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | node-Casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files +[Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) +[Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | node-Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) +[TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence ## Role manager -The role manager is used to manage the RBAC role hierarchy (user-role mapping) in node-casbin. A role manager can retrieve the role data from node-casbin policy rules or external sources such as LDAP, Okta, Auth0, Azure AD, etc. We support different implementations of a role manager. To keep light-weight, we don't put role manager code in the main library (except the default role manager). A complete list of node-casbin role managers is provided as below. Any 3rd-party contribution on a new role manager is welcomed, please inform us and I will put it in this list:) +The role manager is used to manage the RBAC role hierarchy (user-role mapping) in node-Casbin. A role manager can retrieve the role data from node-Casbin policy rules or external sources such as LDAP, Okta, Auth0, Azure AD, etc. We support different implementations of a role manager. To keep light-weight, we don't put role manager code in the main library (except the default role manager). A complete list of node-Casbin role managers is provided as below. Any 3rd-party contribution on a new role manager is welcomed, please inform us and I will put it in this list:) Role manager | Author | Description ----|----|---- -[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) | node-casbin | Supports role hierarchy stored in node-casbin policy +[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) | node-Casbin | Supports role hierarchy stored in node-Casbin policy For developers: all role managers must implement the [RoleManager](https://github.com/casbin/node-casbin/blob/master/src/rbac/roleManager.ts) interface. [Default Role Manager](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) can be used as a reference implementation. From 5937143dc255a8389a675b1bf8b252c69331bd59 Mon Sep 17 00:00:00 2001 From: Eugene Obrezkov Date: Wed, 14 Nov 2018 10:57:34 +0200 Subject: [PATCH 214/497] Update coreEnforcer.ts --- src/coreEnforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 7f41b397..b4174d4f 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -213,7 +213,7 @@ export class CoreEnforcer { return false; } if (this.watcher) { - return this.watcher.update(); + return await this.watcher.update(); } return true; } From 35a2ced7d9e7d992062e72ffb4e8600427596c19 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 4 Dec 2018 22:57:27 +0800 Subject: [PATCH 215/497] Add Casbin JWT Express to our adopters in README. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a0a8a616..04ed5c1d 100644 --- a/README.md +++ b/README.md @@ -216,7 +216,9 @@ Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/mast - [Express](https://github.com/expressjs/express): Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) - [Koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) -- [Egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa , via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) +- [Egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa, via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) +- [Casbin JWT Express](https://github.com/tiagostutz/casbin-jwt-express): Authorization middleware that uses stateless JWT token to validate ACL rules using Casbin + ## License From d4efd20ca3b89badf3f5eb2c1a44ce54b28dfe3c Mon Sep 17 00:00:00 2001 From: nodece Date: Fri, 7 Dec 2018 10:38:32 +0800 Subject: [PATCH 216/497] Fix: https://github.com/casbin/node-casbin/issues/31 --- src/coreEnforcer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index b4174d4f..71014aea 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -318,11 +318,11 @@ export class CoreEnforcer { const parameters: { [key: string]: any } = {}; // @ts-ignore this.model.model.get('r').get('r').tokens.forEach((token, j) => { - parameters[token] = rvals[j].trim(); + parameters[token] = rvals[j]; }); // @ts-ignore this.model.model.get('p').get('p').tokens.forEach((token, j) => { - parameters[token] = pvals[j].trim(); + parameters[token] = pvals[j]; }); const result = expression({ ...parameters, ...functions }); From 843b0226a0ce7b4073380b16dbaf8a42bcb08883 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 7 Dec 2018 21:52:47 +0800 Subject: [PATCH 217/497] Bump to v1.1.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 461cad44..8a492a38 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.5", + "version": "1.1.6", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From 15439c879de78a982e8397104070bae768f54f78 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 7 Dec 2018 23:20:00 +0800 Subject: [PATCH 218/497] Add Mongoose Adapter to README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 04ed5c1d..ab099168 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,7 @@ Adapter | Type | Author | Description [Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) [Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | node-Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) [TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) +[Mongoose Adapter](https://github.com/szy0syz/js-mongoose-adapter) | ORM | [@szy0syz](https://github.com/szy0syz) | MongoDB is supported by [Mongoose](https://mongoosejs.com/) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence From ed99d9a274b9491aa95b2641f87dd8f9821915d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jerry=20Shi=20=28=E9=98=BF=E9=A3=9E=29?= Date: Mon, 10 Dec 2018 14:16:37 +0800 Subject: [PATCH 219/497] Update Mongoose Adapter URL in README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ab099168..c7efe9a1 100644 --- a/README.md +++ b/README.md @@ -181,7 +181,7 @@ Adapter | Type | Author | Description [Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) [Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | node-Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) [TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) -[Mongoose Adapter](https://github.com/szy0syz/js-mongoose-adapter) | ORM | [@szy0syz](https://github.com/szy0syz) | MongoDB is supported by [Mongoose](https://mongoosejs.com/) +[Mongoose Adapter](https://github.com/szy0syz/casbin-mongoose-adapter) | ORM | [@szy0syz](https://github.com/szy0syz) | MongoDB is supported by [Mongoose](https://mongoosejs.com/) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence From 76247adc7a91eadb91610ea502c13a69cfa894a8 Mon Sep 17 00:00:00 2001 From: Eugene Obrezkov Date: Thu, 13 Dec 2018 20:47:07 +0200 Subject: [PATCH 220/497] loadFilteredPolicy must be async --- src/coreEnforcer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 71014aea..c72bdf57 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -172,11 +172,11 @@ export class CoreEnforcer { * * @param filter the filter used to specify which type of policy should be loaded. */ - public loadFilteredPolicy(filter: Filter): boolean { + public async loadFilteredPolicy(filter: Filter): Promise { this.model.clearPolicy(); if ((this.adapter as FilteredAdapter).isFiltered) { - (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); + await (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); } else { throw new Error('filtered policies are not supported by this adapter'); } From 0443a3d7a1b0c90083534bd33eb5d6d8fb5bed8a Mon Sep 17 00:00:00 2001 From: nodece Date: Fri, 14 Dec 2018 17:24:00 +0800 Subject: [PATCH 221/497] v1.1.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8a492a38..ce878a64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.6", + "version": "1.1.7", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/casbin.js", "typings": "lib/casbin.d.ts", From 52ce91a3a5f10c9f185e4946b480a5c9bc2d7884 Mon Sep 17 00:00:00 2001 From: nodece Date: Mon, 17 Dec 2018 21:46:15 +0800 Subject: [PATCH 222/497] Adjust API --- README.md | 3 +- src/casbin.ts | 113 +++++++++++++++++++++++++++++++++++++++++- src/coreEnforcer.ts | 20 +++----- src/enforcer.ts | 47 +++--------------- test/enforcer.test.ts | 64 ++++++++++++------------ test/model.test.ts | 34 ++++++------- test/util.test.ts | 2 + 7 files changed, 177 insertions(+), 106 deletions(-) diff --git a/README.md b/README.md index c7efe9a1..fb6f9809 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,8 @@ npm install casbin --save 1. Initialize a new node-Casbin enforcer with a model file and a policy file: ```typescript - const enforcer = await Enforcer.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); + import casbin from 'casbin'; + const enforcer = await casbin.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); ``` Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details. diff --git a/src/casbin.ts b/src/casbin.ts index c408b0dc..05739c77 100644 --- a/src/casbin.ts +++ b/src/casbin.ts @@ -1,7 +1,116 @@ +import * as Util from './util'; +import { Enforcer } from './enforcer'; +import { setEnableLog } from './util'; +import { Model } from './model'; + export * from './enforcer'; export * from './effect'; export * from './model'; export * from './persist'; export * from './rbac'; -import * as Util from './util'; -export {Util}; +export { Util }; + +/** + * newModel creates a model. + */ +export function newModel(...text: string[]): Model { + const m = new Model(); + + if (text.length === 2) { + if (text[0] !== '') { + m.loadModel(text[0]); + } + } else if (text.length === 1) { + m.loadModelFromText(text[0]); + } else if (text.length !== 0) { + throw new Error('Invalid parameters for model.'); + } + + return m; +} + +/** + * newEnforcer creates an enforcer via file or DB. + * + * File: + * ```js + * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); + * ``` + * + * MySQL DB: + * ```js + * const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); + * const e = new Enforcer('path/to/basic_model.conf', a); + * ``` + * + * @param params + */ + +export function newEnforcer(...params: any[]): Promise { + const e = new Enforcer(); + + let parsedParamLen = 0; + if (params.length >= 1) { + const enableLog = params[params.length - 1]; + if (typeof enableLog === 'boolean') { + setEnableLog(enableLog); + parsedParamLen++; + } + } + + if (params.length - parsedParamLen === 2) { + if (typeof params[0] === 'string') { + if (typeof params[1] === 'string') { + return new Promise((resolve, reject) => { + e.initWithFile(params[0].toString(), params[1].toString()).then(() => { + return resolve(e); + }); + }); + } else { + return new Promise((resolve) => { + e.initWithAdapter(params[0].toString(), params[1]).then(() => { + return resolve(e); + }); + }); + } + } else { + if (typeof params[1] === 'string') { + throw new Error('Invalid parameters for enforcer.'); + } else { + return new Promise((resolve) => { + e.initWithModelAndAdapter(params[0], params[1]).then(() => { + return resolve(e); + }); + }); + } + } + } else if (params.length - parsedParamLen === 1) { + if (typeof params[0] === 'string') { + return new Promise((resolve) => { + e.initWithFile(params[0], '').then(() => { + return resolve(e); + }); + }); + } else { + return new Promise((resolve) => { + // @ts-ignore + e.initWithModelAndAdapter(params[0], null).then(() => { + return resolve(e); + }); + }); + } + } else if (params.length === parsedParamLen) { + return new Promise((resolve) => { + e.initWithFile('', '').then(() => { + return resolve(e); + }); + }); + } else { + throw new Error('Invalid parameters for enforcer.'); + } +} + +export default { + newEnforcer, + newModel +}; diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index c72bdf57..4695d148 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -20,6 +20,7 @@ import { FunctionMap, Model } from './model'; import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { generateGFunction, getEnableLog, logPrint, setEnableLog } from './util'; +import casbin from '../src/casbin'; /** * CoreEnforcer defines the core functionality of an enforcer. @@ -53,21 +54,14 @@ export class CoreEnforcer { /** * newModel creates a model. + * + * @deprecated since version 1.1.8, will be deleted in version 1.2.0. */ public static newModel(...text: string[]): Model { - const m = new Model(); - - if (text.length === 2) { - if (text[0] !== '') { - m.loadModel(text[0]); - } - } else if (text.length === 1) { - m.loadModelFromText(text[0]); - } else if (text.length !== 0) { - throw new Error('Invalid parameters for model.'); - } - - return m; + console.warn( + '[node-casbin] Enforce.newModel() is deprecated, please use casbin.newModel().' + ); + return casbin.newModel(...text); } /** diff --git a/src/enforcer.ts b/src/enforcer.ts index 7e0cfb74..635dec3c 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -15,7 +15,7 @@ import { ManagementEnforcer } from './managementEnforcer'; import { FunctionMap, Model } from './model'; import { Adapter, FileAdapter } from './persist'; -import { setEnableLog } from './util'; +import casbin from '../src/casbin'; /** * Enforcer = ManagementEnforcer + RBAC API. @@ -35,47 +35,14 @@ export class Enforcer extends ManagementEnforcer { * const e = new Enforcer('path/to/basic_model.conf', a); * ``` * + * @deprecated since version 1.1.8, will be deleted in version 1.2.0. * @param params */ public static async newEnforcer(...params: any[]): Promise { - const e = new Enforcer(); - - let parsedParamLen = 0; - if (params.length >= 1) { - const enableLog = params[params.length - 1]; - if (typeof enableLog === 'boolean') { - setEnableLog(enableLog); - parsedParamLen++; - } - } - - if (params.length - parsedParamLen === 2) { - if (typeof params[0] === 'string') { - if (typeof params[1] === 'string') { - await e.initWithFile(params[0].toString(), params[1].toString()); - } else { - await e.initWithAdapter(params[0].toString(), params[1]); - } - } else { - if (typeof params[1] === 'string') { - throw new Error('Invalid parameters for enforcer.'); - } else { - await e.initWithModelAndAdapter(params[0], params[1]); - } - } - } else if (params.length - parsedParamLen === 1) { - if (typeof params[0] === 'string') { - await e.initWithFile(params[0], ''); - } else { - // @ts-ignore - await e.initWithModelAndAdapter(params[0], null); - } - } else if (params.length === parsedParamLen) { - await e.initWithFile('', ''); - } else { - throw new Error('Invalid parameters for enforcer.'); - } - return e; + console.warn( + '[node-casbin] Enforce.newEnforcer() is deprecated, please use casbin.newEnforcer().' + ); + return casbin.newEnforcer(...params); } /** @@ -94,7 +61,7 @@ export class Enforcer extends ManagementEnforcer { * @param adapter current adapter instance */ public async initWithAdapter(modelPath: string, adapter: Adapter): Promise { - const m = Enforcer.newModel(modelPath, ''); + const m = casbin.newModel(modelPath, ''); await this.initWithModelAndAdapter(m, adapter); this.modelPath = modelPath; diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index d6b85b60..aa78d7a6 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -12,9 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Enforcer } from '../src/enforcer'; -import { FileAdapter } from '../src/persist'; -import { Util } from '../src/casbin'; +import casbin, { Enforcer, FileAdapter, Util } from '../src/casbin'; function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); @@ -28,7 +26,7 @@ function testGetPolicy(e: Enforcer, res: string[][]) { } test('TestKeyMatchModelInMemory', async () => { - const m = Enforcer.newModel(); + const m = casbin.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); @@ -36,7 +34,7 @@ test('TestKeyMatchModelInMemory', async () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - let e = await Enforcer.newEnforcer(m, a); + let e = await casbin.newEnforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -60,7 +58,7 @@ test('TestKeyMatchModelInMemory', async () => { testEnforce(e, 'cathy', '/cathy_data', 'POST', true); testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); - e = await Enforcer.newEnforcer(m); + e = await casbin.newEnforcer(m); await a.loadPolicy(e.getModel()); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); @@ -87,7 +85,7 @@ test('TestKeyMatchModelInMemory', async () => { }); test('TestKeyMatchModelInMemoryDeny', async () => { - const m = Enforcer.newModel(); + const m = casbin.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('e', 'e', '!some(where (p.eft == deny))'); @@ -95,20 +93,20 @@ test('TestKeyMatchModelInMemoryDeny', async () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - const e = await Enforcer.newEnforcer(m, a); + const e = await casbin.newEnforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); }); test('TestRBACModelInMemoryIndeterminate', async () => { - const m = Enforcer.newModel(); + const m = casbin.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('g', 'g', '_, _'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await Enforcer.newEnforcer(m); + const e = await casbin.newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'invalid'); @@ -116,14 +114,14 @@ test('TestRBACModelInMemoryIndeterminate', async () => { }); test('TestRBACModelInMemory', async () => { - const m = Enforcer.newModel(); + const m = casbin.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('g', 'g', '_, _'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await Enforcer.newEnforcer(m); + const e = await casbin.newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'read'); await e.addPermissionForUser('bob', 'data2', 'write'); @@ -159,12 +157,12 @@ e = some(where (p.eft == allow)) [matchers] m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act `; - const m = Enforcer.newModel(text); + const m = casbin.newModel(text); // The above is the same as: - // const m = Enforcer.newModel(); + // const m = casbin.newModel(); // m.loadModelFromText(text); - const e = await Enforcer.newEnforcer(m); + const e = await casbin.newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'read'); await e.addPermissionForUser('bob', 'data2', 'write'); @@ -183,14 +181,14 @@ m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act }); test('TestNotUsedRBACModelInMemory', async () => { - const m = Enforcer.newModel(); + const m = casbin.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('g', 'g', '_, _'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await Enforcer.newEnforcer(m); + const e = await casbin.newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'read'); await e.addPermissionForUser('bob', 'data2', 'write'); @@ -206,26 +204,26 @@ test('TestNotUsedRBACModelInMemory', async () => { }); test('TestReloadPolicy', async () => { - const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await e.loadPolicy(); testGetPolicy(e, [['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); }); test('TestSavePolicy', async () => { - const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await e.savePolicy(); }); test('TestClearPolicy', async () => { - const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); e.clearPolicy(); }); test('TestEnableEnforce', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); e.enableEnforce(false); testEnforce(e, 'alice', 'data1', 'read', true); @@ -249,9 +247,9 @@ test('TestEnableEnforce', async () => { }); test('TestEnableLog', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv', true); + const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv', true); // The log is enabled by default, so the above is the same with: - // const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + // const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -275,7 +273,7 @@ test('TestEnableLog', async () => { }); test('TestEnableAutoSave', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); e.enableAutoSave(false); // Because AutoSave is disabled, the policy change only affects the policy in Casbin enforcer, @@ -313,7 +311,7 @@ test('TestEnableAutoSave', async () => { test('TestInitWithAdapter', async () => { const adapter = new FileAdapter('examples/basic_policy.csv'); - const e = await Enforcer.newEnforcer('examples/basic_model.conf', adapter); + const e = await casbin.newEnforcer('examples/basic_model.conf', adapter); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -326,15 +324,15 @@ test('TestInitWithAdapter', async () => { }); test('TestRoleLinks', async () => { - const e = await Enforcer.newEnforcer('examples/rbac_model.conf'); + const e = await casbin.newEnforcer('examples/rbac_model.conf'); e.enableAutoBuildRoleLinks(false); e.buildRoleLinks(); e.enforce('user501', 'data9', 'read'); }); test('TestGetAndSetModel', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - const e2 = await Enforcer.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await casbin.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'root', 'data1', 'read', false); @@ -344,8 +342,8 @@ test('TestGetAndSetModel', async () => { }); test('TestGetAndSetAdapterInMem', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - const e2 = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -359,7 +357,7 @@ test('TestGetAndSetAdapterInMem', async () => { }); test('TestSetAdapterFromFile', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf'); + const e = await casbin.newEnforcer('examples/basic_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); @@ -371,9 +369,9 @@ test('TestSetAdapterFromFile', async () => { }); test('TestInitEmpty', async () => { - const e = await Enforcer.newEnforcer(); + const e = await casbin.newEnforcer(); - const m = Enforcer.newModel(); + const m = casbin.newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); diff --git a/test/model.test.ts b/test/model.test.ts index 1dbed1a6..ffc9a9c6 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Enforcer } from '../src/enforcer'; import * as _ from 'lodash'; +import casbin, { Enforcer } from '../src/casbin'; function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); @@ -28,7 +28,7 @@ function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, a } test('TestBasicModel', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -41,7 +41,7 @@ test('TestBasicModel', async () => { }); test('TestBasicModelNoPolicy', async () => { - const e = await Enforcer.newEnforcer('examples/basic_model.conf'); + const e = await casbin.newEnforcer('examples/basic_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -54,7 +54,7 @@ test('TestBasicModelNoPolicy', async () => { }); test('TestBasicModelWithRoot', async () => { - const e = await Enforcer.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -71,7 +71,7 @@ test('TestBasicModelWithRoot', async () => { }); test('TestBasicModelWithRootNoPolicy', async () => { - const e = await Enforcer.newEnforcer('examples/basic_with_root_model.conf'); + const e = await casbin.newEnforcer('examples/basic_with_root_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -88,7 +88,7 @@ test('TestBasicModelWithRootNoPolicy', async () => { }); test('TestBasicModelWithoutUsers', async () => { - const e = await Enforcer.newEnforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); testEnforceWithoutUsers(e, 'data1', 'read', true); testEnforceWithoutUsers(e, 'data1', 'write', false); @@ -97,7 +97,7 @@ test('TestBasicModelWithoutUsers', async () => { }); test('TestBasicModelWithoutResources', async () => { - const e = await Enforcer.newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); + const e = await casbin.newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); await e.initialize(); testEnforceWithoutUsers(e, 'alice', 'read', true); @@ -107,7 +107,7 @@ test('TestBasicModelWithoutResources', async () => { }); test('TestRBACModel', async () => { - const e = await Enforcer.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -120,7 +120,7 @@ test('TestRBACModel', async () => { }); test('TestRBACModelWithResourceRoles', async () => { - const e = await Enforcer.newEnforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); + const e = await casbin.newEnforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', true); @@ -133,7 +133,7 @@ test('TestRBACModelWithResourceRoles', async () => { }); test('TestRBACModelWithDomains', async () => { - const e = await Enforcer.newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + const e = await casbin.newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); @@ -156,7 +156,7 @@ class TestResource { } test('TestABACModel', async () => { - const e = await Enforcer.newEnforcer('examples/abac_model.conf'); + const e = await casbin.newEnforcer('examples/abac_model.conf'); const data1 = new TestResource('data1', 'alice'); const data2 = new TestResource('data2', 'bob'); @@ -172,7 +172,7 @@ test('TestABACModel', async () => { }); test('TestKeyMatchModel', async () => { - const e = await Enforcer.newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); + const e = await casbin.newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -198,7 +198,7 @@ test('TestKeyMatchModel', async () => { }); test('TestKeyMatch2Model', async () => { - const e = await Enforcer.newEnforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); + const e = await casbin.newEnforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); testEnforce(e, 'alice', '/alice_data', 'GET', false); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); @@ -224,7 +224,7 @@ function customFunctionWrapper(...args: any[]): boolean { } test('TestKeyMatchCustomModel', async () => { - const e = await Enforcer.newEnforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); + const e = await casbin.newEnforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); e.addFunction('keyMatchCustom', customFunctionWrapper); @@ -233,7 +233,7 @@ test('TestKeyMatchCustomModel', async () => { }); test('TestIPMatchModel', async () => { - const e = await Enforcer.newEnforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); + const e = await casbin.newEnforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); testEnforce(e, '192.168.2.123', 'data1', 'read', true); testEnforce(e, '192.168.2.123', 'data1', 'write', false); @@ -257,7 +257,7 @@ test('TestIPMatchModel', async () => { }); test('TestPriorityModel', async () => { - const e = await Enforcer.newEnforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); + const e = await casbin.newEnforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -270,7 +270,7 @@ test('TestPriorityModel', async () => { }); test('TestPriorityModelIndeterminate', async () => { - const e = await Enforcer.newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); + const e = await casbin.newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', false); }); diff --git a/test/util.test.ts b/test/util.test.ts index 6069654a..9e3be09f 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -35,7 +35,9 @@ test('test logPrint', () => { }); test('test Valuate', () => { + // @ts-ignore expect(compile('1 + 1 === 2')()).toEqual(true); + // @ts-ignore expect(compile('1 + 1 !== 2')()).toEqual(false); }); From 7bc9a3002e64494da6d6a717771f59bda644d114 Mon Sep 17 00:00:00 2001 From: nodece Date: Tue, 18 Dec 2018 14:29:39 +0800 Subject: [PATCH 223/497] Adjust export file and bump to v1.1.8 --- package.json | 6 ++--- src/casbin.ts | 54 +++++++++---------------------------- src/coreEnforcer.ts | 4 +-- src/enforcer.ts | 6 ++--- src/index.ts | 9 +++++++ test/enforcer.test.ts | 62 +++++++++++++++++++++---------------------- test/model.test.ts | 34 ++++++++++++------------ 7 files changed, 77 insertions(+), 98 deletions(-) create mode 100644 src/index.ts diff --git a/package.json b/package.json index ce878a64..572cc04c 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "casbin", - "version": "1.1.7", + "version": "1.1.8", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", - "main": "lib/casbin.js", - "typings": "lib/casbin.d.ts", + "main": "lib/index.js", + "typings": "lib/index.d.ts", "scripts": { "precommit": "lint-staged", "prepublish": "yarn run lint && yarn run test && yarn build", diff --git a/src/casbin.ts b/src/casbin.ts index 05739c77..3fb7aae4 100644 --- a/src/casbin.ts +++ b/src/casbin.ts @@ -1,19 +1,11 @@ -import * as Util from './util'; import { Enforcer } from './enforcer'; import { setEnableLog } from './util'; import { Model } from './model'; -export * from './enforcer'; -export * from './effect'; -export * from './model'; -export * from './persist'; -export * from './rbac'; -export { Util }; - /** * newModel creates a model. */ -export function newModel(...text: string[]): Model { +function newModel(...text: string[]): Model { const m = new Model(); if (text.length === 2) { @@ -46,7 +38,7 @@ export function newModel(...text: string[]): Model { * @param params */ -export function newEnforcer(...params: any[]): Promise { +async function newEnforcer(...params: any[]): Promise { const e = new Enforcer(); let parsedParamLen = 0; @@ -61,56 +53,34 @@ export function newEnforcer(...params: any[]): Promise { if (params.length - parsedParamLen === 2) { if (typeof params[0] === 'string') { if (typeof params[1] === 'string') { - return new Promise((resolve, reject) => { - e.initWithFile(params[0].toString(), params[1].toString()).then(() => { - return resolve(e); - }); - }); + await e.initWithFile(params[0].toString(), params[1].toString()); } else { - return new Promise((resolve) => { - e.initWithAdapter(params[0].toString(), params[1]).then(() => { - return resolve(e); - }); - }); + await e.initWithAdapter(params[0].toString(), params[1]); } } else { if (typeof params[1] === 'string') { throw new Error('Invalid parameters for enforcer.'); } else { - return new Promise((resolve) => { - e.initWithModelAndAdapter(params[0], params[1]).then(() => { - return resolve(e); - }); - }); + await e.initWithModelAndAdapter(params[0], params[1]); } } } else if (params.length - parsedParamLen === 1) { if (typeof params[0] === 'string') { - return new Promise((resolve) => { - e.initWithFile(params[0], '').then(() => { - return resolve(e); - }); - }); + await e.initWithFile(params[0], ''); } else { - return new Promise((resolve) => { - // @ts-ignore - e.initWithModelAndAdapter(params[0], null).then(() => { - return resolve(e); - }); - }); + // @ts-ignore + await e.initWithModelAndAdapter(params[0], null); } } else if (params.length === parsedParamLen) { - return new Promise((resolve) => { - e.initWithFile('', '').then(() => { - return resolve(e); - }); - }); + await e.initWithFile('', ''); } else { throw new Error('Invalid parameters for enforcer.'); } + + return e; } -export default { +export { newEnforcer, newModel }; diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 4695d148..aa95717e 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -20,7 +20,7 @@ import { FunctionMap, Model } from './model'; import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { generateGFunction, getEnableLog, logPrint, setEnableLog } from './util'; -import casbin from '../src/casbin'; +import { newModel } from './casbin'; /** * CoreEnforcer defines the core functionality of an enforcer. @@ -61,7 +61,7 @@ export class CoreEnforcer { console.warn( '[node-casbin] Enforce.newModel() is deprecated, please use casbin.newModel().' ); - return casbin.newModel(...text); + return newModel(...text); } /** diff --git a/src/enforcer.ts b/src/enforcer.ts index 635dec3c..ee726098 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -15,7 +15,7 @@ import { ManagementEnforcer } from './managementEnforcer'; import { FunctionMap, Model } from './model'; import { Adapter, FileAdapter } from './persist'; -import casbin from '../src/casbin'; +import { newEnforcer, newModel } from './casbin'; /** * Enforcer = ManagementEnforcer + RBAC API. @@ -42,7 +42,7 @@ export class Enforcer extends ManagementEnforcer { console.warn( '[node-casbin] Enforce.newEnforcer() is deprecated, please use casbin.newEnforcer().' ); - return casbin.newEnforcer(...params); + return newEnforcer(...params); } /** @@ -61,7 +61,7 @@ export class Enforcer extends ManagementEnforcer { * @param adapter current adapter instance */ public async initWithAdapter(modelPath: string, adapter: Adapter): Promise { - const m = casbin.newModel(modelPath, ''); + const m = newModel(modelPath, ''); await this.initWithModelAndAdapter(m, adapter); this.modelPath = modelPath; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 00000000..8603adbc --- /dev/null +++ b/src/index.ts @@ -0,0 +1,9 @@ +import * as Util from './util'; + +export * from './enforcer'; +export * from './effect'; +export * from './model'; +export * from './persist'; +export * from './rbac'; +export * from './casbin'; +export { Util }; diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index aa78d7a6..17b4da01 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import casbin, { Enforcer, FileAdapter, Util } from '../src/casbin'; +import { newModel, newEnforcer, Enforcer, FileAdapter, Util } from '../src'; function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); @@ -26,7 +26,7 @@ function testGetPolicy(e: Enforcer, res: string[][]) { } test('TestKeyMatchModelInMemory', async () => { - const m = casbin.newModel(); + const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); @@ -34,7 +34,7 @@ test('TestKeyMatchModelInMemory', async () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - let e = await casbin.newEnforcer(m, a); + let e = await newEnforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -58,7 +58,7 @@ test('TestKeyMatchModelInMemory', async () => { testEnforce(e, 'cathy', '/cathy_data', 'POST', true); testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); - e = await casbin.newEnforcer(m); + e = await newEnforcer(m); await a.loadPolicy(e.getModel()); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); @@ -85,7 +85,7 @@ test('TestKeyMatchModelInMemory', async () => { }); test('TestKeyMatchModelInMemoryDeny', async () => { - const m = casbin.newModel(); + const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('e', 'e', '!some(where (p.eft == deny))'); @@ -93,20 +93,20 @@ test('TestKeyMatchModelInMemoryDeny', async () => { const a = new FileAdapter('examples/keymatch_policy.csv'); - const e = await casbin.newEnforcer(m, a); + const e = await newEnforcer(m, a); testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); }); test('TestRBACModelInMemoryIndeterminate', async () => { - const m = casbin.newModel(); + const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('g', 'g', '_, _'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await casbin.newEnforcer(m); + const e = await newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'invalid'); @@ -114,14 +114,14 @@ test('TestRBACModelInMemoryIndeterminate', async () => { }); test('TestRBACModelInMemory', async () => { - const m = casbin.newModel(); + const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('g', 'g', '_, _'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await casbin.newEnforcer(m); + const e = await newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'read'); await e.addPermissionForUser('bob', 'data2', 'write'); @@ -157,12 +157,12 @@ e = some(where (p.eft == allow)) [matchers] m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act `; - const m = casbin.newModel(text); + const m = newModel(text); // The above is the same as: - // const m = casbin.newModel(); + // const m = newModel(); // m.loadModelFromText(text); - const e = await casbin.newEnforcer(m); + const e = await newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'read'); await e.addPermissionForUser('bob', 'data2', 'write'); @@ -181,14 +181,14 @@ m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act }); test('TestNotUsedRBACModelInMemory', async () => { - const m = casbin.newModel(); + const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('g', 'g', '_, _'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await casbin.newEnforcer(m); + const e = await newEnforcer(m); await e.addPermissionForUser('alice', 'data1', 'read'); await e.addPermissionForUser('bob', 'data2', 'write'); @@ -204,26 +204,26 @@ test('TestNotUsedRBACModelInMemory', async () => { }); test('TestReloadPolicy', async () => { - const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await e.loadPolicy(); testGetPolicy(e, [['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); }); test('TestSavePolicy', async () => { - const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await e.savePolicy(); }); test('TestClearPolicy', async () => { - const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); e.clearPolicy(); }); test('TestEnableEnforce', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); e.enableEnforce(false); testEnforce(e, 'alice', 'data1', 'read', true); @@ -247,9 +247,9 @@ test('TestEnableEnforce', async () => { }); test('TestEnableLog', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv', true); + const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv', true); // The log is enabled by default, so the above is the same with: - // const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + // const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -273,7 +273,7 @@ test('TestEnableLog', async () => { }); test('TestEnableAutoSave', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); e.enableAutoSave(false); // Because AutoSave is disabled, the policy change only affects the policy in Casbin enforcer, @@ -311,7 +311,7 @@ test('TestEnableAutoSave', async () => { test('TestInitWithAdapter', async () => { const adapter = new FileAdapter('examples/basic_policy.csv'); - const e = await casbin.newEnforcer('examples/basic_model.conf', adapter); + const e = await newEnforcer('examples/basic_model.conf', adapter); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -324,15 +324,15 @@ test('TestInitWithAdapter', async () => { }); test('TestRoleLinks', async () => { - const e = await casbin.newEnforcer('examples/rbac_model.conf'); + const e = await newEnforcer('examples/rbac_model.conf'); e.enableAutoBuildRoleLinks(false); e.buildRoleLinks(); e.enforce('user501', 'data9', 'read'); }); test('TestGetAndSetModel', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - const e2 = await casbin.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'root', 'data1', 'read', false); @@ -342,8 +342,8 @@ test('TestGetAndSetModel', async () => { }); test('TestGetAndSetAdapterInMem', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - const e2 = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); + const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await newEnforcer('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -357,7 +357,7 @@ test('TestGetAndSetAdapterInMem', async () => { }); test('TestSetAdapterFromFile', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf'); + const e = await newEnforcer('examples/basic_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); @@ -369,9 +369,9 @@ test('TestSetAdapterFromFile', async () => { }); test('TestInitEmpty', async () => { - const e = await casbin.newEnforcer(); + const e = await newEnforcer(); - const m = casbin.newModel(); + const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); m.addDef('p', 'p', 'sub, obj, act'); m.addDef('e', 'e', 'some(where (p.eft == allow))'); diff --git a/test/model.test.ts b/test/model.test.ts index ffc9a9c6..1d57ce7f 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -13,7 +13,7 @@ // limitations under the License. import * as _ from 'lodash'; -import casbin, { Enforcer } from '../src/casbin'; +import { newEnforcer, newModel, Enforcer } from '../src'; function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): void { expect(e.enforce(sub, obj, act)).toBe(res); @@ -28,7 +28,7 @@ function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, a } test('TestBasicModel', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -41,7 +41,7 @@ test('TestBasicModel', async () => { }); test('TestBasicModelNoPolicy', async () => { - const e = await casbin.newEnforcer('examples/basic_model.conf'); + const e = await newEnforcer('examples/basic_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -54,7 +54,7 @@ test('TestBasicModelNoPolicy', async () => { }); test('TestBasicModelWithRoot', async () => { - const e = await casbin.newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + const e = await newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -71,7 +71,7 @@ test('TestBasicModelWithRoot', async () => { }); test('TestBasicModelWithRootNoPolicy', async () => { - const e = await casbin.newEnforcer('examples/basic_with_root_model.conf'); + const e = await newEnforcer('examples/basic_with_root_model.conf'); testEnforce(e, 'alice', 'data1', 'read', false); testEnforce(e, 'alice', 'data1', 'write', false); @@ -88,7 +88,7 @@ test('TestBasicModelWithRootNoPolicy', async () => { }); test('TestBasicModelWithoutUsers', async () => { - const e = await casbin.newEnforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); + const e = await newEnforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); testEnforceWithoutUsers(e, 'data1', 'read', true); testEnforceWithoutUsers(e, 'data1', 'write', false); @@ -97,7 +97,7 @@ test('TestBasicModelWithoutUsers', async () => { }); test('TestBasicModelWithoutResources', async () => { - const e = await casbin.newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); + const e = await newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); await e.initialize(); testEnforceWithoutUsers(e, 'alice', 'read', true); @@ -107,7 +107,7 @@ test('TestBasicModelWithoutResources', async () => { }); test('TestRBACModel', async () => { - const e = await casbin.newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -120,7 +120,7 @@ test('TestRBACModel', async () => { }); test('TestRBACModelWithResourceRoles', async () => { - const e = await casbin.newEnforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); + const e = await newEnforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', true); @@ -133,7 +133,7 @@ test('TestRBACModelWithResourceRoles', async () => { }); test('TestRBACModelWithDomains', async () => { - const e = await casbin.newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); @@ -156,7 +156,7 @@ class TestResource { } test('TestABACModel', async () => { - const e = await casbin.newEnforcer('examples/abac_model.conf'); + const e = await newEnforcer('examples/abac_model.conf'); const data1 = new TestResource('data1', 'alice'); const data2 = new TestResource('data2', 'bob'); @@ -172,7 +172,7 @@ test('TestABACModel', async () => { }); test('TestKeyMatchModel', async () => { - const e = await casbin.newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); + const e = await newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -198,7 +198,7 @@ test('TestKeyMatchModel', async () => { }); test('TestKeyMatch2Model', async () => { - const e = await casbin.newEnforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); + const e = await newEnforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); testEnforce(e, 'alice', '/alice_data', 'GET', false); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); @@ -224,7 +224,7 @@ function customFunctionWrapper(...args: any[]): boolean { } test('TestKeyMatchCustomModel', async () => { - const e = await casbin.newEnforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); + const e = await newEnforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); e.addFunction('keyMatchCustom', customFunctionWrapper); @@ -233,7 +233,7 @@ test('TestKeyMatchCustomModel', async () => { }); test('TestIPMatchModel', async () => { - const e = await casbin.newEnforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); + const e = await newEnforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); testEnforce(e, '192.168.2.123', 'data1', 'read', true); testEnforce(e, '192.168.2.123', 'data1', 'write', false); @@ -257,7 +257,7 @@ test('TestIPMatchModel', async () => { }); test('TestPriorityModel', async () => { - const e = await casbin.newEnforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); + const e = await newEnforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', true); testEnforce(e, 'alice', 'data1', 'write', false); @@ -270,7 +270,7 @@ test('TestPriorityModel', async () => { }); test('TestPriorityModelIndeterminate', async () => { - const e = await casbin.newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); + const e = await newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); testEnforce(e, 'alice', 'data1', 'read', false); }); From bcff238f6aec19875769faf7ae5a50fd70cd7d2c Mon Sep 17 00:00:00 2001 From: nodece Date: Thu, 20 Dec 2018 22:15:32 +0800 Subject: [PATCH 224/497] Bump to v1.1.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 572cc04c..502e37bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.8", + "version": "1.1.9", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From ff31699a1ed6c10307ff5d7cab76685133875e05 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Date: Thu, 3 Jan 2019 16:03:16 +0100 Subject: [PATCH 225/497] chore: set `coveralls` as a dev dependency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 502e37bb..ca3f664d 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@types/jest": "^23.3.1", "@types/lodash": "^4.14.113", "@types/node": "^10.5.3", + "coveralls": "^3.0.2", "husky": "^0.14.3", "jest": "^23.4.2", "lint-staged": "^7.2.0", @@ -26,7 +27,6 @@ "typescript": "^2.9.2" }, "dependencies": { - "coveralls": "^3.0.2", "expression-eval": "^1.3.0", "ip": "^1.1.5", "lodash": "^4.17.10" From 43e2654f2779fdb56af05eefb98af62186a8717c Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 4 Jan 2019 13:58:44 +0800 Subject: [PATCH 226/497] Add Management API's test. --- test/managementAPI.test.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 test/managementAPI.test.ts diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts new file mode 100644 index 00000000..b15bc4da --- /dev/null +++ b/test/managementAPI.test.ts @@ -0,0 +1,31 @@ +// Copyright 2019 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { newEnforcer, Enforcer, Util } from '../src'; + +function testStringList(e: Enforcer, title: string, f: () => string[], res: string[]) { + const myRes = f.call(e); + console.log(title + ': ', myRes); + + expect(Util.arrayEquals(res, myRes)).toBe(true); +} + +test('TestGetList', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + + testStringList(e, 'Subjects', e.getAllSubjects, ['alice', 'bob', 'data2_admin']); + testStringList(e, 'Objects', e.getAllObjects, ['data1', 'data2']); + testStringList(e, 'Actions', e.getAllActions, ['read', 'write']); + testStringList(e, 'Roles', e.getAllRoles, ['data2_admin']); +}); From f00fd47b18536d15a9f4a95e10d747ef6b0c77b0 Mon Sep 17 00:00:00 2001 From: nodece Date: Sat, 5 Jan 2019 08:32:44 +0800 Subject: [PATCH 227/497] Remove deprecated function and Refactor Logger --- src/casbin.ts | 18 +++++++++-- src/coreEnforcer.ts | 21 +++---------- src/enforcer.ts | 26 +--------------- src/index.ts | 15 +++++++++ src/log/defaultLogger.ts | 40 ++++++++++++++++++++++++ src/{util/log.ts => log/index.ts} | 24 +++----------- src/log/logUtil.ts | 45 +++++++++++++++++++++++++++ src/log/logger.ts | 28 +++++++++++++++++ src/model/assertion.ts | 2 +- src/model/model.ts | 9 +++--- src/persist/defaultFilteredAdapter.ts | 1 - src/rbac/defaultRoleManager.ts | 2 +- src/util/index.ts | 1 - test/util.test.ts | 22 ++++++------- 14 files changed, 172 insertions(+), 82 deletions(-) create mode 100644 src/log/defaultLogger.ts rename src/{util/log.ts => log/index.ts} (57%) create mode 100644 src/log/logUtil.ts create mode 100644 src/log/logger.ts diff --git a/src/casbin.ts b/src/casbin.ts index 3fb7aae4..b6820481 100644 --- a/src/casbin.ts +++ b/src/casbin.ts @@ -1,5 +1,19 @@ +// Copyright 2019 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import { Enforcer } from './enforcer'; -import { setEnableLog } from './util'; +import { getLogger } from './log'; import { Model } from './model'; /** @@ -45,7 +59,7 @@ async function newEnforcer(...params: any[]): Promise { if (params.length >= 1) { const enableLog = params[params.length - 1]; if (typeof enableLog === 'boolean') { - setEnableLog(enableLog); + getLogger().enableLog(enableLog); parsedParamLen++; } } diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index aa95717e..7cb864c6 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -19,8 +19,9 @@ import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model } from './model'; import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; -import { generateGFunction, getEnableLog, logPrint, setEnableLog } from './util'; +import { generateGFunction } from './util'; import { newModel } from './casbin'; +import { getLogger, logPrint } from './log'; /** * CoreEnforcer defines the core functionality of an enforcer. @@ -52,25 +53,13 @@ export class CoreEnforcer { this.autoBuildRoleLinks = true; } - /** - * newModel creates a model. - * - * @deprecated since version 1.1.8, will be deleted in version 1.2.0. - */ - public static newModel(...text: string[]): Model { - console.warn( - '[node-casbin] Enforce.newModel() is deprecated, please use casbin.newModel().' - ); - return newModel(...text); - } - /** * loadModel reloads the model from the model CONF file. * Because the policy is attached to a model, * so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). */ public loadModel(): void { - this.model = CoreEnforcer.newModel(); + this.model = newModel(); this.model.loadModel(this.modelPath); this.model.printModel(); this.fm = FunctionMap.loadFunctionMap(); @@ -228,7 +217,7 @@ export class CoreEnforcer { * @param enable whether to enable Casbin's log. */ public enableLog(enable: boolean): void { - setEnableLog(enable); + getLogger().enableLog(enable); } /** @@ -389,7 +378,7 @@ export class CoreEnforcer { // only generate the request --> result string if the message // is going to be logged. - if (getEnableLog()) { + if (getLogger().isEnable()) { let reqStr = 'Request: '; for (let i = 0; i < rvals.length; i++) { if (i !== rvals.length - 1) { diff --git a/src/enforcer.ts b/src/enforcer.ts index ee726098..11fe448b 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -15,36 +15,12 @@ import { ManagementEnforcer } from './managementEnforcer'; import { FunctionMap, Model } from './model'; import { Adapter, FileAdapter } from './persist'; -import { newEnforcer, newModel } from './casbin'; +import { newModel } from './casbin'; /** * Enforcer = ManagementEnforcer + RBAC API. */ export class Enforcer extends ManagementEnforcer { - /** - * newEnforcer creates an enforcer via file or DB. - * - * File: - * ```js - * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); - * ``` - * - * MySQL DB: - * ```js - * const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); - * const e = new Enforcer('path/to/basic_model.conf', a); - * ``` - * - * @deprecated since version 1.1.8, will be deleted in version 1.2.0. - * @param params - */ - public static async newEnforcer(...params: any[]): Promise { - console.warn( - '[node-casbin] Enforce.newEnforcer() is deprecated, please use casbin.newEnforcer().' - ); - return newEnforcer(...params); - } - /** * initWithFile initializes an enforcer with a model file and a policy file. * @param modelPath model file path diff --git a/src/index.ts b/src/index.ts index 8603adbc..f90187ee 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,17 @@ +// Copyright 2019 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import * as Util from './util'; export * from './enforcer'; @@ -6,4 +20,5 @@ export * from './model'; export * from './persist'; export * from './rbac'; export * from './casbin'; +export * from './log'; export { Util }; diff --git a/src/log/defaultLogger.ts b/src/log/defaultLogger.ts new file mode 100644 index 00000000..8c551c5f --- /dev/null +++ b/src/log/defaultLogger.ts @@ -0,0 +1,40 @@ +// Copyright 2019 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Logger } from './logger'; + +// DefaultLogger is the implementation for a Logger +export class DefaultLogger implements Logger { + private enable: boolean = false; + + public enableLog(enable: boolean): void { + this.enable = enable; + } + + public isEnable(): boolean { + return this.enable; + } + + public print(...v: any[]): void { + if (this.enable) { + console.log(...v); + } + } + + public printf(format: string, ...v: any[]): void { + if (this.enable) { + console.log(format, ...v); + } + } +} diff --git a/src/util/log.ts b/src/log/index.ts similarity index 57% rename from src/util/log.ts rename to src/log/index.ts index 69f1f3e0..c1edf6ec 100644 --- a/src/util/log.ts +++ b/src/log/index.ts @@ -1,4 +1,4 @@ -// Copyright 2017 The casbin Authors. All Rights Reserved. +// Copyright 2019 The Casbin Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,22 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// enableLog controls whether to print log to console. -let enableLog = false; - -// logPrint prints the log. -function logPrint(v: any): void { - if (enableLog) { - console.log(v); - } -} - -function getEnableLog(): boolean { - return enableLog; -} - -function setEnableLog(val: boolean) { - enableLog = val; -} - -export { logPrint, getEnableLog, setEnableLog }; +export * from './defaultLogger'; +export * from './logger'; +export * from './logUtil'; diff --git a/src/log/logUtil.ts b/src/log/logUtil.ts new file mode 100644 index 00000000..1d60e39f --- /dev/null +++ b/src/log/logUtil.ts @@ -0,0 +1,45 @@ +// Copyright 2019 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { DefaultLogger } from './defaultLogger'; +import { Logger } from './logger'; + +let logger: Logger = new DefaultLogger(); + +// setLogger sets the current logger. +function setLogger(l: Logger) { + logger = l; +} + +// getLogger returns the current logger. +function getLogger() { + return logger; +} + +// logPrint prints the log. +function logPrint(...v: any[]) { + logger.print(...v); +} + +// logPrintf prints the log with the format. +function logPrintf(format: string, ...v: any[]) { + logger.printf(format, ...v); +} + +export { + setLogger, + getLogger, + logPrint, + logPrintf +}; diff --git a/src/log/logger.ts b/src/log/logger.ts new file mode 100644 index 00000000..7fd0874f --- /dev/null +++ b/src/log/logger.ts @@ -0,0 +1,28 @@ +// Copyright 2019 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Logger is the logging interface implementation. +export interface Logger { + // enableLog controls whether print the message. + enableLog(enable: boolean): void; + + // isEnable returns if logger is enabled. + isEnable(): boolean; + + // print formats using the default formats for its operands and logs the message. + print(...v: any[]): void; + + // printf formats according to a format specifier and logs the message. + printf(format: string, ...v: any[]): void; +} diff --git a/src/model/assertion.ts b/src/model/assertion.ts index b334c97c..29c49232 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -14,7 +14,7 @@ import * as rbac from '../rbac'; import * as _ from 'lodash'; -import { logPrint } from '../util'; +import { logPrint } from '../log'; // Assertion represents an expression in a section of the model. // For example: r = sub, obj, act diff --git a/src/model/model.ts b/src/model/model.ts index ab222318..293344dc 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -17,6 +17,7 @@ import * as rbac from '../rbac'; import * as util from '../util'; import { Config } from '../config'; import { Assertion } from './assertion'; +import { logPrint } from '../log'; const sectionNameMap: { [index: string]: string } = { r: 'request_definition', @@ -124,10 +125,10 @@ export class Model { // printModel prints the model to the log. public printModel(): void { - util.logPrint('Model:'); + logPrint('Model:'); this.model.forEach((value, key) => { value.forEach((ast, astKey) => { - util.logPrint(`${key}.${astKey}: ${ast.value}`); + logPrint(`${key}.${astKey}: ${ast.value}`); }); }); } @@ -267,11 +268,11 @@ export class Model { // printPolicy prints the policy to log. public printPolicy(): void { - util.logPrint('Policy:'); + logPrint('Policy:'); this.model.forEach((map, key) => { if (key === 'p' || key === 'g') { map.forEach(ast => { - util.logPrint(`key, : ${ast.value}, : , ${ast.policy}`); + logPrint(`key, : ${ast.value}, : , ${ast.policy}`); }); } }); diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 0f5e0e15..696f8cc8 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -1,7 +1,6 @@ import { FilteredAdapter } from './filteredAdapter'; import { Model } from '../model'; import { FileAdapter } from './fileAdapter'; -import { Adapter } from './adapter'; import { Helper } from './helper'; import { readFile } from '../util'; diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 57a7dd6d..03a34567 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -13,7 +13,7 @@ // limitations under the License. import { RoleManager } from './roleManager'; -import { logPrint } from '../util'; +import { logPrint } from '../log'; // RoleManager provides a default implementation for the RoleManager interface export class DefaultRoleManager implements RoleManager { diff --git a/src/util/index.ts b/src/util/index.ts index 8267cb97..e5e16d3b 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -13,5 +13,4 @@ // limitations under the License. export * from './builtinOperators'; -export * from './log'; export * from './util'; diff --git a/test/util.test.ts b/test/util.test.ts index 9e3be09f..f42cec0f 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -12,26 +12,26 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as util from '../src/util'; +import { getLogger, logPrint, Util as util } from '../src'; import { compile } from 'expression-eval'; test('test enableLog success', () => { - util.setEnableLog(true); - expect(util.getEnableLog()).toEqual(true); - util.setEnableLog(false); - expect(util.getEnableLog()).toEqual(false); + getLogger().enableLog(true); + expect(getLogger().isEnable()).toEqual(true); + getLogger().enableLog(false); + expect(getLogger().isEnable()).toEqual(false); }); test('test enableLog failed', () => { - util.setEnableLog(true); - expect(util.getEnableLog()).not.toEqual(false); - util.setEnableLog(false); - expect(util.getEnableLog()).not.toEqual(true); + getLogger().enableLog(true); + expect(getLogger().isEnable()).not.toEqual(false); + getLogger().enableLog(false); + expect(getLogger().isEnable()).not.toEqual(true); }); test('test logPrint', () => { - util.setEnableLog(true); - expect(util.logPrint('test log')).toBeUndefined(); + getLogger().enableLog(true); + expect(logPrint('test log')).toBeUndefined(); }); test('test Valuate', () => { From c64f1eb13722d3cc82e359bf373aade25da81241 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 5 Jan 2019 14:11:48 +0800 Subject: [PATCH 228/497] Bump to v2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ca3f664d..c189bdc1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "1.1.9", + "version": "2.0.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 3311273cb9755649cc5287650d01c4b492cd1e64 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 11 Jan 2019 20:55:01 +0800 Subject: [PATCH 229/497] Add elastic.io's Mongoose Adapter to README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb6f9809..edb75d66 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ Adapter | Type | Author | Description [Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) [Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | node-Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) [TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) -[Mongoose Adapter](https://github.com/szy0syz/casbin-mongoose-adapter) | ORM | [@szy0syz](https://github.com/szy0syz) | MongoDB is supported by [Mongoose](https://mongoosejs.com/) +[Mongoose Adapter](https://github.com/elasticio/casbin-mongoose-adapter) | ORM | [elastic.io](https://github.com/elasticio) | MongoDB is supported by [Mongoose](https://mongoosejs.com/) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence From acd2f0133a7ce54efff76c9f37cf5b552272e1bb Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 11 Jan 2019 20:58:35 +0800 Subject: [PATCH 230/497] Improve table's format in README. --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index edb75d66..2f9b6a6d 100644 --- a/README.md +++ b/README.md @@ -178,10 +178,10 @@ In node-Casbin, the policy storage is implemented as an adapter (aka middleware Adapter | Type | Author | Description ----|------|----|---- -[File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | node-Casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files -[Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) -[Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | node-Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) -[TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | node-Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) +[File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | Casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files +[Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) +[Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) +[TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) [Mongoose Adapter](https://github.com/elasticio/casbin-mongoose-adapter) | ORM | [elastic.io](https://github.com/elasticio) | MongoDB is supported by [Mongoose](https://mongoosejs.com/) For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence @@ -192,7 +192,7 @@ The role manager is used to manage the RBAC role hierarchy (user-role mapping) i Role manager | Author | Description ----|----|---- -[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) | node-Casbin | Supports role hierarchy stored in node-Casbin policy +[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) | Casbin | Supports role hierarchy stored in node-Casbin policy For developers: all role managers must implement the [RoleManager](https://github.com/casbin/node-casbin/blob/master/src/rbac/roleManager.ts) interface. [Default Role Manager](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) can be used as a reference implementation. From bc30d3142171dbbb43d27e8b2e4820a0d59bfc39 Mon Sep 17 00:00:00 2001 From: nodece Date: Wed, 16 Jan 2019 11:53:41 +0800 Subject: [PATCH 231/497] Fix #43 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2f9b6a6d..ac0d819a 100644 --- a/README.md +++ b/README.md @@ -163,8 +163,8 @@ https://casbin.org/docs/en/tutorials node-Casbin provides two sets of APIs to manage permissions: -- [Management API](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/main/ManagementEnforcer.java): the primitive API that provides full support for node-Casbin policy management. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/ManagementAPIUnitTest.java) for examples. -- [RBAC API](https://github.com/casbin/node-casbin/blob/master/src/main/java/org/casbin/node-casbin/main/Enforcer.java): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/RbacAPIUnitTest.java) for examples. +- [Management API](https://github.com/casbin/node-casbin/blob/master/src/managementEnforcer.ts): the primitive API that provides full support for node-Casbin policy management. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/ManagementAPIUnitTest.java) for examples. +- [RBAC API](https://github.com/casbin/node-casbin/blob/master/src/enforcer.ts): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/RbacAPIUnitTest.java) for examples. We also provide a web-based UI for model management and policy management: From 010f1a000706771e48756e3e0a377b0c18889803 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 19 Jan 2019 10:08:57 +0800 Subject: [PATCH 232/497] Add four new Casbin implementations for Python, Delphi, C# and Rust in README. --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ac0d819a..6be907b9 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,16 @@ node-Casbin is a powerful and efficient open-source access control library for N ## All the languages supported by Casbin: -[![golang](https://casbin.org/docs/assets/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/docs/assets/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/docs/assets/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/docs/assets/langs/php.png)](https://github.com/php-casbin/php-casbin) +[![golang](https://casbin.org/img/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/img/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/img/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/img/langs/php.png)](https://github.com/php-casbin/php-casbin) ----|----|----|---- [Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) production-ready | production-ready | production-ready | production-ready +[![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/Devolutions/casbin-net) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/Devolutions/casbin-rs) +----|----|----|---- +[PyCasbin](https://github.com/casbin/pycasbin) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-Net](https://github.com/Devolutions/casbin-net) | [Casbin-RS](https://github.com/Devolutions/casbin-rs) +production-ready | experimental | WIP | WIP + ## Installation ``` From 10b28babccbe38686466c889d88919e22edb5431 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 25 Jan 2019 21:23:18 +0800 Subject: [PATCH 233/497] Add domain parameter to deleteRolesForUser() API. --- src/enforcer.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 11fe448b..1c0f89c7 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -159,10 +159,15 @@ export class Enforcer extends ManagementEnforcer { * Returns false if the user does not have any roles (aka not affected). * * @param user the user. + * @param domain the domain. * @return succeeds or not. */ - public async deleteRolesForUser(user: string): Promise { - return await this.removeFilteredGroupingPolicy(0, user); + public async deleteRolesForUser(user: string, domain?: string): Promise { + if (domain == null) { + return await this.removeFilteredGroupingPolicy(0, user); + } else { + return await this.removeFilteredGroupingPolicy(0, user, '', domain); + } } /** From 504047efd9317550e223680a4a81dc046fe63848 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 26 Jan 2019 10:25:32 +0800 Subject: [PATCH 234/497] Return boolean in deleteRole() API. --- src/enforcer.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 1c0f89c7..0ca5f576 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -185,10 +185,12 @@ export class Enforcer extends ManagementEnforcer { * deleteRole deletes a role. * * @param role the role. + * @return succeeds or not. */ - public async deleteRole(role: string): Promise { - await this.removeFilteredGroupingPolicy(1, role); - await this.removeFilteredPolicy(0, role); + public async deleteRole(role: string): Promise { + const res1 = await this.removeFilteredGroupingPolicy(1, role); + const res2 = await this.removeFilteredPolicy(0, role); + return res1 || res2; } /** From 5335c3e24126f321a24a911816b3154976ba83af Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 7 Feb 2019 19:46:17 +0800 Subject: [PATCH 235/497] Modify keyMatch2() function: keyMatch2("/project/1/member", "/project/1") returns false now, fix: https://github.com/casbin/node-casbin/issues/48 --- src/util/builtinOperators.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index b2a69709..d1f52f24 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -51,10 +51,10 @@ function keyMatch2(key1: string, key2: string): boolean { if (!_.includes(key2, '/:')) { break; } - key2 = '^' + key2.replace(regexp, '$1[^/]+$2') + '$'; + key2 = key2.replace(regexp, '$1[^/]+$2'); } - return regexMatch(key1, key2); + return regexMatch(key1, '^' + key2 + '$'); } // keyMatch2Func is the wrapper for keyMatch2. From 439f4664ec25062490b3f058380ae4c4abc3b01a Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 8 Feb 2019 10:53:05 +0800 Subject: [PATCH 236/497] Update typescript dependency to v3 to fix the build error. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c189bdc1..60561184 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "rimraf": "^2.6.2", "ts-jest": "22.4.6", "tslint": "^5.11.0", - "typescript": "^2.9.2" + "typescript": "^3.3.3" }, "dependencies": { "expression-eval": "^1.3.0", From 2b2ca686ca2c38bd583f543914291f78330d52fd Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 8 Feb 2019 10:53:59 +0800 Subject: [PATCH 237/497] Bump to v2.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 60561184..df07a6f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "2.0.0", + "version": "2.0.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 9d3408f6d288410ed88b78973d56f1db5ff861d0 Mon Sep 17 00:00:00 2001 From: huadong zuo Date: Wed, 20 Feb 2019 10:05:53 +0800 Subject: [PATCH 238/497] =?UTF-8?q?chore(readme)=20add=20nest=20auth=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20nt-casbin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6be907b9..1b3bbff9 100644 --- a/README.md +++ b/README.md @@ -224,9 +224,11 @@ Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/mast - [Express](https://github.com/expressjs/express): Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) - [Koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) - [Egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa, via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) +- [nestjs](https://github.com/notadd/nt-casbin) Nest is a framework for building efficient, scalable Node.js server-side applications. It built with TypeScript and combines elements of OOP , FP , and FRP . via plugin : [nt-casbin](https://github.com/notadd/nt-casbin) - [Casbin JWT Express](https://github.com/tiagostutz/casbin-jwt-express): Authorization middleware that uses stateless JWT token to validate ACL rules using Casbin + ## License This project is licensed under the [Apache 2.0 license](LICENSE). From 40dd90a6dd7a023746bc3c15593d96d802c612ab Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 21 Feb 2019 23:28:02 +0800 Subject: [PATCH 239/497] Add nest-casbin middleware to README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b3bbff9..1e07ee46 100644 --- a/README.md +++ b/README.md @@ -224,7 +224,7 @@ Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/mast - [Express](https://github.com/expressjs/express): Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) - [Koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) - [Egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa, via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) -- [nestjs](https://github.com/notadd/nt-casbin) Nest is a framework for building efficient, scalable Node.js server-side applications. It built with TypeScript and combines elements of OOP , FP , and FRP . via plugin : [nt-casbin](https://github.com/notadd/nt-casbin) +- [Nest](https://nestjs.com/): Progressive Node.js framework for building efficient and scalable server-side applications on top of TypeScript & JavaScript. via plugin: [nt-casbin](https://github.com/notadd/nt-casbin) or [nest-casbin](https://github.com/pardjs/nest-casbin) - [Casbin JWT Express](https://github.com/tiagostutz/casbin-jwt-express): Authorization middleware that uses stateless JWT token to validate ACL rules using Casbin From 2248f70af36de5c4970b1ba32a235b87a03e06f1 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 24 Feb 2019 11:20:19 +0800 Subject: [PATCH 240/497] Update package.json scripts --- examples/rbac_policy.csv | 1 - package.json | 2 +- test/model.test.ts | 4 ++++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/rbac_policy.csv b/examples/rbac_policy.csv index 9bbfa7cf..f93d6df8 100644 --- a/examples/rbac_policy.csv +++ b/examples/rbac_policy.csv @@ -2,5 +2,4 @@ p, alice, data1, read p, bob, data2, write p, data2_admin, data2, read p, data2_admin, data2, write - g, alice, data2_admin \ No newline at end of file diff --git a/package.json b/package.json index df07a6f4..22307186 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "typings": "lib/index.d.ts", "scripts": { "precommit": "lint-staged", - "prepublish": "yarn run lint && yarn run test && yarn build", + "prepublishOnly": "yarn run lint && yarn run test && yarn build", "build": "rimraf lib && tsc", "lint": "tslint \"src/**/*.ts\"", "fix": "tslint \"src/**/*.ts\" --fix", diff --git a/test/model.test.ts b/test/model.test.ts index 1d57ce7f..232170df 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -173,7 +173,11 @@ test('TestABACModel', async () => { test('TestKeyMatchModel', async () => { const e = await newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); + const sub = 'alice'; // the user that wants to access a resource. + const obj = '/alice_data/'; // the resource that is going to be accessed. + const act = 'GET'; // the operation that the user performs on the resource. + testEnforce(e, sub, obj, act, true); testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); From 7dfb9be055aed2cb204c71bd4d3f12400816669d Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 28 Mar 2019 00:03:16 +0800 Subject: [PATCH 241/497] Move adapter section to website. --- README.md | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/README.md b/README.md index 1e07ee46..88337403 100644 --- a/README.md +++ b/README.md @@ -179,17 +179,7 @@ We also provide a web-based UI for model management and policy management: ## Policy persistence -In node-Casbin, the policy storage is implemented as an adapter (aka middleware for node-Casbin). To keep light-weight, we don't put adapter code in the main library (except the default file adapter). A complete list of node-Casbin adapters is provided as below. Any 3rd-party contribution on a new adapter is welcomed, please inform us and I will put it in this list:) - -Adapter | Type | Author | Description -----|------|----|---- -[File Adapter (built-in)](https://github.com/casbin/casbin/wiki/Policy-persistence#file-adapter) | File | Casbin | Persistence for [.CSV (Comma-Separated Values)](https://en.wikipedia.org/wiki/Comma-separated_values) files -[Sequelize Adapter](https://github.com/node-casbin/sequelize-adapter) | ORM | Casbin | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by [Sequelize](https://github.com/sequelize/sequelize) -[Waterline Adapter](https://github.com/node-casbin/waterline-adapter) | ORM | Casbin | MySQL, MongoDB, neDB, Postgres are supported by [Waterline](https://github.com/balderdashy/waterline) -[TypeORM Adapter](https://github.com/node-casbin/typeorm-adapter) | ORM | Casbin | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by [TypeORM](https://github.com/typeorm/typeorm) -[Mongoose Adapter](https://github.com/elasticio/casbin-mongoose-adapter) | ORM | [elastic.io](https://github.com/elasticio) | MongoDB is supported by [Mongoose](https://mongoosejs.com/) - -For details of adapters, please refer to the documentation: https://github.com/casbin/casbin/wiki/Policy-persistence +https://casbin.org/docs/en/adapters ## Role manager From c2374d770457e0bbb96aa2bd68f0d63e203394ce Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 31 Mar 2019 00:16:07 +0800 Subject: [PATCH 242/497] Separate "g" and "p" rules with "\n" in examples. --- examples/rbac_policy.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/rbac_policy.csv b/examples/rbac_policy.csv index f93d6df8..41502726 100644 --- a/examples/rbac_policy.csv +++ b/examples/rbac_policy.csv @@ -2,4 +2,5 @@ p, alice, data1, read p, bob, data2, write p, data2_admin, data2, read p, data2_admin, data2, write -g, alice, data2_admin \ No newline at end of file + +g, alice, data2_admin From 6d768258ee24b6634ad3e990aa63759df8ef6cce Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 31 Mar 2019 00:19:12 +0800 Subject: [PATCH 243/497] Fix code style and removeFilteredNamedPolicy method parameter type --- src/managementEnforcer.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index a9dc83b2..6e61acce 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -269,7 +269,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return await this.removeFilteredNamedPolicy('p', fieldIndex, fieldValues); + return await this.removeFilteredNamedPolicy('p', fieldIndex, ...fieldValues); } /** @@ -292,7 +292,7 @@ export class ManagementEnforcer extends InternalEnforcer { * means not to match this field. * @return succeeds or not. */ - public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, fieldValues: string[]): Promise { + public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { return await this.removeFilteredPolicyInternal('p', ptype, fieldIndex, fieldValues); } @@ -301,7 +301,8 @@ export class ManagementEnforcer extends InternalEnforcer { * * @param params the "g" policy rule, ptype "g" is implicitly used. * @return whether the rule exists. - */ public hasGroupingPolicy(...params: string[]): boolean { + */ + public hasGroupingPolicy(...params: string[]): boolean { return this.hasNamedGroupingPolicy('g', ...params); } From 24a7242d666e15d47e32286c943cfe478130dbef Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 31 Mar 2019 00:19:59 +0800 Subject: [PATCH 244/497] Add more management api test --- test/managementAPI.test.ts | 213 +++++++++++++++++++++++++++++++++++-- 1 file changed, 203 insertions(+), 10 deletions(-) diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index b15bc4da..23a7deeb 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -14,18 +14,211 @@ import { newEnforcer, Enforcer, Util } from '../src'; -function testStringList(e: Enforcer, title: string, f: () => string[], res: string[]) { - const myRes = f.call(e); - console.log(title + ': ', myRes); +let e = {} as Enforcer; - expect(Util.arrayEquals(res, myRes)).toBe(true); +beforeEach(async () => { + e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); +}); + +function testArrayEquals(value: string[], other: string[]) { + expect(Util.arrayEquals(value, other)).toBe(true); +} + +function testArray2DEquals(value: string[][], other: string[][]) { + expect(Util.array2DEquals(value, other)).toBe(true); } -test('TestGetList', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); +it('getAllSubjects', async () => { + const allSubjects = e.getAllSubjects(); + expect(Util.arrayEquals(allSubjects, ['alice', 'bob', 'data2_admin'])); +}); + +it('getAllNamedSubjects', async () => { + const allNamedSubjects = e.getAllNamedSubjects('p'); + expect(Util.arrayEquals(allNamedSubjects, ['alice', 'bob', 'data2_admin'])); +}); + +it('getAllObjects', async () => { + const allObjects = e.getAllObjects(); + testArrayEquals(allObjects, ['data1', 'data2']); +}); + +it('getAllNamedObjects', async () => { + let allNamedObjects = e.getAllNamedObjects('p'); + testArrayEquals(allNamedObjects, ['data1', 'data2']); + allNamedObjects = e.getAllNamedObjects('p1'); + testArrayEquals(allNamedObjects, []); +}); + +it('getAllActions', async () => { + const allActions = e.getAllActions(); + testArrayEquals(allActions, ['read', 'write']); +}); + +it('getAllNamedActions', async () => { + let allNamedActions = e.getAllNamedActions('p'); + testArrayEquals(allNamedActions, ['read', 'write']); + allNamedActions = e.getAllNamedActions('p1'); + testArrayEquals(allNamedActions, []); +}); + +it('getAllRoles', async () => { + const allRoles = e.getAllRoles(); + testArrayEquals(allRoles, ['data2_admin']); +}); + +it('getAllNamedRoles', async () => { + let allNamedRoles = e.getAllNamedRoles('g'); + testArrayEquals(allNamedRoles, ['data2_admin']); + allNamedRoles = e.getAllNamedRoles('g1'); + testArrayEquals(allNamedRoles, []); +}); + +it('getPolicy', async () => { + const policy = e.getPolicy(); + testArray2DEquals(policy, [ + ['alice', 'data1', 'read'], + ['bob', 'data2', 'write'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write'] + ]); +}); + +it('getFilteredPolicy', async () => { + let filteredPolicy = e.getFilteredPolicy(0, 'alice'); + testArray2DEquals(filteredPolicy, [['alice', 'data1', 'read']]); + filteredPolicy = e.getFilteredPolicy(0, 'bob'); + testArray2DEquals(filteredPolicy, [['bob', 'data2', 'write']]); +}); + +it('getNamedPolicy', async () => { + let namedPolicy = e.getNamedPolicy('p'); + testArray2DEquals(namedPolicy, [ + ['alice', 'data1', 'read'], + ['bob', 'data2', 'write'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write']] + ); + namedPolicy = e.getNamedPolicy('p1'); + testArray2DEquals(namedPolicy, []); +}); + +it('getFilteredNamedPolicy', async () => { + const filteredNamedPolicy = e.getFilteredNamedPolicy('p', 0, 'bob'); + testArray2DEquals(filteredNamedPolicy, [['bob', 'data2', 'write']]); +}); + +it('getGroupingPolicy', async () => { + const groupingPolicy = e.getGroupingPolicy(); + testArray2DEquals(groupingPolicy, [[ + 'alice', 'data2_admin' + ]]); +}); + +it('getFilteredGroupingPolicy', async () => { + const filteredGroupingPolicy = e.getFilteredGroupingPolicy(0, 'alice'); + testArray2DEquals(filteredGroupingPolicy, [[ + 'alice', 'data2_admin' + ]]); +}); + +it('getNamedGroupingPolicy', async () => { + const namedGroupingPolicy = e.getNamedGroupingPolicy('g'); + testArray2DEquals(namedGroupingPolicy, [[ + 'alice', 'data2_admin' + ]]); +}); + +it('getFilteredNamedGroupingPolicy', async () => { + const namedGroupingPolicy = e.getFilteredNamedGroupingPolicy('g', 0, 'alice'); + testArray2DEquals(namedGroupingPolicy, [[ + 'alice', 'data2_admin' + ]]); +}); + +it('hasPolicy', async () => { + const hasPolicy = e.hasPolicy('data2_admin', 'data2', 'read'); + expect(hasPolicy).toBe(true); +}); + +it('hasNamedPolicy', async () => { + const hasNamedPolicy = e.hasNamedPolicy('p', 'data2_admin', 'data2', 'read'); + expect(hasNamedPolicy).toBe(true); +}); + +it('addPolicy', async () => { + const p = ['eve', 'data3', 'read']; + const added = await e.addPolicy(...p); + expect(added).toBe(true); + expect(e.hasPolicy(...p)).toBe(true); +}); + +it('addNamedPolicy', async () => { + const p = ['eve', 'data3', 'read']; + const added = await e.addNamedPolicy('p', ...p); + expect(added).toBe(true); + expect(e.hasPolicy(...p)).toBe(true); +}); + +it('removePolicy', async () => { + const p = ['alice', 'data1', 'read']; + const removed = await e.removePolicy(...p); + expect(removed).toBe(true); + expect(e.hasPolicy(...p)).toBe(false); +}); + +it('removeFilteredPolicy', async () => { + const p = ['alice', 'data1', 'read']; + const removed = await e.removeFilteredPolicy(0, ...p); + expect(removed).toBe(true); + expect(e.hasPolicy(...p)).toBe(false); +}); + +it('removeNamedPolicy', async () => { + const p = ['alice', 'data1', 'read']; + const removed = await e.removeNamedPolicy('p', ...p); + expect(removed).toBe(true); + expect(e.hasPolicy(...p)).toBe(false); +}); + +it('removeFilteredNamedPolicy', async () => { + const p = ['alice', 'data1', 'read']; + const removed = await e.removeFilteredNamedPolicy('p', 0, ...p); + expect(removed).toBe(true); + expect(e.hasPolicy(...p)).toBe(false); +}); + +it('hasGroupingPolicy', async () => { + const has = e.hasGroupingPolicy('alice', 'data2_admin'); + expect(has).toBe(true); +}); + +it('hasNamedGroupingPolicy', async () => { + const has = e.hasNamedGroupingPolicy('g', 'alice', 'data2_admin'); + expect(has).toBe(true); +}); + +it('addGroupingPolicy', async () => { + const added = await e.addGroupingPolicy('group1', 'data2_admin'); + expect(added).toBe(true); +}); + +it('addNamedGroupingPolicy ', async () => { + const added = await e.addNamedGroupingPolicy('g', 'group1', 'data2_admin'); + expect(added).toBe(true); +}); + +it('removeGroupingPolicy', async () => { + const removed = await e.removeGroupingPolicy('alice', 'data2_admin'); + expect(removed).toBe(true); +}); + +it('removeFilteredGroupingPolicy', async () => { + const removed = await e.removeFilteredGroupingPolicy(0, 'alice'); + expect(removed).toBe(true); +}); - testStringList(e, 'Subjects', e.getAllSubjects, ['alice', 'bob', 'data2_admin']); - testStringList(e, 'Objects', e.getAllObjects, ['data1', 'data2']); - testStringList(e, 'Actions', e.getAllActions, ['read', 'write']); - testStringList(e, 'Roles', e.getAllRoles, ['data2_admin']); +it('removeFilteredNamedGroupingPolicy', async () => { + const removed = await e.removeFilteredNamedGroupingPolicy('g', 0, 'alice'); + expect(removed).toBe(true); }); From 1d29c56f7ddac2f95b7fb4a547162a3c1f845218 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 31 Mar 2019 00:20:24 +0800 Subject: [PATCH 245/497] Add .gitattributes --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..6313b56c --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf From fdeac1fc7e6acbc2da052bf8f36ac076b4654300 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 4 Apr 2019 22:34:09 +0800 Subject: [PATCH 246/497] Move role manager section to website. --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 88337403..7498ed50 100644 --- a/README.md +++ b/README.md @@ -183,13 +183,7 @@ https://casbin.org/docs/en/adapters ## Role manager -The role manager is used to manage the RBAC role hierarchy (user-role mapping) in node-Casbin. A role manager can retrieve the role data from node-Casbin policy rules or external sources such as LDAP, Okta, Auth0, Azure AD, etc. We support different implementations of a role manager. To keep light-weight, we don't put role manager code in the main library (except the default role manager). A complete list of node-Casbin role managers is provided as below. Any 3rd-party contribution on a new role manager is welcomed, please inform us and I will put it in this list:) - -Role manager | Author | Description -----|----|---- -[Default Role Manager (built-in)](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) | Casbin | Supports role hierarchy stored in node-Casbin policy - -For developers: all role managers must implement the [RoleManager](https://github.com/casbin/node-casbin/blob/master/src/rbac/roleManager.ts) interface. [Default Role Manager](https://github.com/casbin/node-casbin/blob/master/src/rbac/defaultRoleManager.ts) can be used as a reference implementation. +https://casbin.org/docs/en/role-managers ## Examples From 1e16ee8755330ce818aa66c9db9a5746d74eac3e Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 5 Apr 2019 00:51:22 +0800 Subject: [PATCH 247/497] Add Middlewares link to README. --- README.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7498ed50..1a93c109 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ npm install casbin --save - [Policy persistence](#policy-persistence) - [Role manager](#role-manager) - [Examples](#examples) +- [Middlewares](#middlewares) - [Our adopters](#our-adopters) ## Supported models @@ -201,17 +202,13 @@ RESTful | [keymatch_model.conf](https://github.com/casbin/node-casbin/blob/maste Deny-override | [rbac_model_with_deny.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_deny_model.conf) | [rbac_policy_with_deny.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_deny_policy.csv) Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/priority_model.conf) | [priority_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/priority_policy.csv) -## Our adopters - -### Web frameworks +## Middlewares -- [Express](https://github.com/expressjs/express): Fast, unopinionated, minimalist web framework for node, via plugin: [express-authz](https://github.com/node-casbin/express-authz) -- [Koa](https://github.com/koajs/koa): Expressive middleware for node.js using ES2017 async functions, via plugin: [koa-authz](https://github.com/node-casbin/koa-authz) -- [Egg](https://github.com/eggjs/egg): Born to build better enterprise frameworks and apps with Node.js & Koa, via plugin: [egg-authz](https://github.com/node-casbin/egg-authz) -- [Nest](https://nestjs.com/): Progressive Node.js framework for building efficient and scalable server-side applications on top of TypeScript & JavaScript. via plugin: [nt-casbin](https://github.com/notadd/nt-casbin) or [nest-casbin](https://github.com/pardjs/nest-casbin) -- [Casbin JWT Express](https://github.com/tiagostutz/casbin-jwt-express): Authorization middleware that uses stateless JWT token to validate ACL rules using Casbin +Authz middlewares for web frameworks: https://casbin.org/docs/en/middlewares +## Our adopters +https://casbin.org/docs/en/adopters ## License From d5df83c668fcee53202ea45dc02898bd5e324ff9 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sat, 13 Apr 2019 13:49:09 +0800 Subject: [PATCH 248/497] Update Policy management in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1a93c109..959d21d1 100644 --- a/README.md +++ b/README.md @@ -169,8 +169,8 @@ https://casbin.org/docs/en/tutorials node-Casbin provides two sets of APIs to manage permissions: -- [Management API](https://github.com/casbin/node-casbin/blob/master/src/managementEnforcer.ts): the primitive API that provides full support for node-Casbin policy management. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/ManagementAPIUnitTest.java) for examples. -- [RBAC API](https://github.com/casbin/node-casbin/blob/master/src/enforcer.ts): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. See [here](https://github.com/casbin/node-casbin/blob/master/src/test/java/org/casbin/node-casbin/main/RbacAPIUnitTest.java) for examples. +- [Management API](https://casbin.org/docs/en/management-api): the primitive API that provides full support for node-Casbin policy management. +- [RBAC API](https://casbin.org/docs/en/management-api): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. We also provide a web-based UI for model management and policy management: From 9901e34d11ce6c406df5ec6d614009570cd2ce0d Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 17 Apr 2019 13:16:04 +0800 Subject: [PATCH 249/497] Update travis install command --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e70b4051..f591590a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,10 +7,12 @@ node_js: - '8' - '6' +install: yarn install + script: echo "Running tests against $(node -v)..." jobs: include: - stage: Produce Coverage node_js: node - script: jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage \ No newline at end of file + script: jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage From 7711fe76d6285ae35375fd871cc18486983582b4 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 17 Apr 2019 13:16:24 +0800 Subject: [PATCH 250/497] Remove all config --- .gitattributes | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 6313b56c..e69de29b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +0,0 @@ -* text=auto eol=lf From babbd8b6dd367bbb5a55df01e1a56bd30db9088d Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 17 Apr 2019 17:10:21 +0800 Subject: [PATCH 251/497] Update test and git hook --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 22307186..4473fdbb 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "prepublishOnly": "yarn run lint && yarn run test && yarn build", "build": "rimraf lib && tsc", "lint": "tslint \"src/**/*.ts\"", - "fix": "tslint \"src/**/*.ts\" --fix", "test": "jest" }, "devDependencies": { @@ -48,7 +47,7 @@ ], "lint-staged": { "*.{ts,js}": [ - "tslint --fix", + "yarn lint", "git add" ] }, @@ -58,7 +57,7 @@ "^.+\\.(ts|tsx)$": "ts-jest" }, "testMatch": [ - "**/test/*.+(ts|tsx)" + "**/test/**/*.+(ts|tsx)" ], "moduleFileExtensions": [ "ts", From 7c67f72904e2a857191596738c7292283443d135 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 17 Apr 2019 17:10:49 +0800 Subject: [PATCH 252/497] update only-arrow-functions rule --- tslint.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tslint.json b/tslint.json index 5b45cc3c..04c7827b 100644 --- a/tslint.json +++ b/tslint.json @@ -5,6 +5,7 @@ ], "jsRules": {}, "rules": { + "only-arrow-functions": false, "max-classes-per-file": false, "interface-name": false, "no-console": [false], @@ -18,4 +19,4 @@ "max-line-length": false }, "rulesDirectory": [] -} \ No newline at end of file +} From 91435149e9efbba2e848bb6d8b0192a135be1494 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 17 Apr 2019 17:10:55 +0800 Subject: [PATCH 253/497] Add multiline parse support for model --- examples/rbac_policy.csv | 1 - src/config.ts | 46 ++++++++++++++++++++++++++++--------- src/index.ts | 1 + test/config/config.test.ts | 25 ++++++++++++++++++++ test/config/testini.ini | 47 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 test/config/config.test.ts create mode 100644 test/config/testini.ini diff --git a/examples/rbac_policy.csv b/examples/rbac_policy.csv index 41502726..8479f3c9 100644 --- a/examples/rbac_policy.csv +++ b/examples/rbac_policy.csv @@ -2,5 +2,4 @@ p, alice, data1, read p, bob, data2, write p, data2_admin, data2, read p, data2_admin, data2, write - g, alice, data2_admin diff --git a/src/config.ts b/src/config.ts index 2c6f51d4..4d3664c5 100644 --- a/src/config.ts +++ b/src/config.ts @@ -17,10 +17,11 @@ export class Config { private static DEFAULT_SECTION = 'default'; private static DEFAULT_COMMENT = '#'; private static DEFAULT_COMMENT_SEM = ';'; + private static DEFAULT_MULTI_LINE_SEPARATOR = '\\'; private data: Map>; - constructor() { + private constructor() { this.data = new Map>(); } @@ -75,33 +76,56 @@ export class Config { } private parseBuffer(buf: Buffer): void { - let section = ''; const lines = buf.toString().split('\n'); + const linesCount = lines.length; + let section = ''; + let currentLine = ''; lines.forEach((n, index) => { const line = n.trim(); + const lineNumber = index + 1; if (!line) { return; } - if (line.startsWith(Config.DEFAULT_COMMENT)) { - return; - } else if (line.startsWith(Config.DEFAULT_COMMENT_SEM)) { + if (line.startsWith(Config.DEFAULT_COMMENT) || line.startsWith(Config.DEFAULT_COMMENT_SEM)) { return; } else if (line.startsWith('[') && line.endsWith(']')) { + if (currentLine.length !== 0) { + this.write(section, lineNumber - 1, currentLine); + currentLine = ''; + } section = line.substring(1, line.length - 1); } else { - const equalIndex = line.indexOf('='); - if (equalIndex === -1) { - throw new Error(`parse the content error : line ${index + 1}`); + let shouldWrite = false; + if (line.includes(Config.DEFAULT_MULTI_LINE_SEPARATOR)) { + currentLine += line.substring(0, line.length - 1).trim(); + // when the last line has a "\" string + if (lineNumber + 1 === linesCount) { + shouldWrite = true; + } + } else { + currentLine += line; + shouldWrite = true; + } + if (shouldWrite) { + this.write(section, lineNumber, currentLine); + currentLine = ''; } - const key = line.substring(0, equalIndex); - const value = line.substring(equalIndex + 1); - this.addConfig(section, key.trim(), value.trim()); } }); } + private write(section: string, lineNum: number, line: string) { + const equalIndex = line.indexOf('='); + if (equalIndex === -1) { + throw new Error(`parse the content error : line ${lineNum}`); + } + const key = line.substring(0, equalIndex); + const value = line.substring(equalIndex + 1); + this.addConfig(section, key.trim(), value.trim()); + } + public getBool(key: string): boolean { return !!this.get(key); } diff --git a/src/index.ts b/src/index.ts index f90187ee..83079b79 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,6 +14,7 @@ import * as Util from './util'; +export * from './config'; export * from './enforcer'; export * from './effect'; export * from './model'; diff --git a/test/config/config.test.ts b/test/config/config.test.ts new file mode 100644 index 00000000..5c846528 --- /dev/null +++ b/test/config/config.test.ts @@ -0,0 +1,25 @@ +import { Config } from '../../src'; + +const config = Config.newConfig('test/config/testini.ini'); + +describe('multi-line test', () => { + it('should config.get("multi1::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + expect(config.get('multi1::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); + }); + + it('should config.get("multi2::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + expect(config.get('multi2::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); + }); + + it('should config.get("multi3::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + expect(config.get('multi3::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); + }); + + it('should config.get("multi4::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + expect(config.get('multi4::name')).toEqual(''); + }); + + it('should config.get("multi5::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + expect(config.get('multi5::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); + }); +}); diff --git a/test/config/testini.ini b/test/config/testini.ini new file mode 100644 index 00000000..59a69873 --- /dev/null +++ b/test/config/testini.ini @@ -0,0 +1,47 @@ +# test config +debug = true +url = act.wiki + +; redis config +[redis] +redis.key = push1,push2 + +; mysql config +[mysql] +mysql.dev.host = 127.0.0.1 +mysql.dev.user = root +mysql.dev.pass = 123456 +mysql.dev.db = test + +mysql.master.host = 10.0.0.1 +mysql.master.user = root +mysql.master.pass = 89dds)2$#d +mysql.master.db = act + +; math config +[math] +math.i64 = 64 +math.f64 = 64.1 + +# multi-line test +[multi1] +name = r.sub==p.sub \ + &&r.obj==p.obj\ + \ +[multi2] +name = r.sub==p.sub \ + &&r.obj==p.obj + +[multi3] +name = r.sub==p.sub \ + &&r.obj==p.obj + +[multi4] +name = \ +\ + \ + +[multi5] +name = r.sub==p.sub \ + &&r.obj==p.obj\ + \ From fb9a4cbbe23f0e92597510f6b66bf41e6ff3f252 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 17 Apr 2019 19:32:10 +0800 Subject: [PATCH 254/497] v2.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4473fdbb..4b488940 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "2.0.1", + "version": "2.0.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 7db4f47dcae81befb0666f8a02f52beb4bc25bac Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 21 Apr 2019 16:02:58 +0800 Subject: [PATCH 255/497] Add getImplicitRolesForUser and getImplicitPermissionsForUser --- examples/rbac_with_hierarchy_policy.csv | 10 +++++ ...bac_with_hierarchy_with_domains_policy.csv | 8 ++++ src/coreEnforcer.ts | 9 ++--- src/enforcer.ts | 40 +++++++++++++++++++ src/internalEnforcer.ts | 12 +++--- src/rbac/defaultRoleManager.ts | 6 +-- test/rbacAPI.test.ts | 32 +++++++++++++++ 7 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 examples/rbac_with_hierarchy_policy.csv create mode 100644 examples/rbac_with_hierarchy_with_domains_policy.csv create mode 100644 test/rbacAPI.test.ts diff --git a/examples/rbac_with_hierarchy_policy.csv b/examples/rbac_with_hierarchy_policy.csv new file mode 100644 index 00000000..f7229986 --- /dev/null +++ b/examples/rbac_with_hierarchy_policy.csv @@ -0,0 +1,10 @@ +p, alice, data1, read +p, bob, data2, write +p, data1_admin, data1, read +p, data1_admin, data1, write +p, data2_admin, data2, read +p, data2_admin, data2, write + +g, alice, admin +g, admin, data1_admin +g, admin, data2_admin \ No newline at end of file diff --git a/examples/rbac_with_hierarchy_with_domains_policy.csv b/examples/rbac_with_hierarchy_with_domains_policy.csv new file mode 100644 index 00000000..8e0f3d61 --- /dev/null +++ b/examples/rbac_with_hierarchy_with_domains_policy.csv @@ -0,0 +1,8 @@ +p, role:reader, domain1, data1, read +p, role:writer, domain1, data1, write + +g, role:global_admin, role:reader, domain1 +g, role:global_admin, role:writer, domain1 + +g, alice, role:global_admin, domain1 + diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 7cb864c6..606f313a 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -32,11 +32,9 @@ export class CoreEnforcer { protected fm: FunctionMap; private eft: Effector; - // @ts-ignore - protected adapter: FilteredAdapter | Adapter = null; - // @ts-ignore - protected watcher: Watcher = null; - private rm: RoleManager; + protected adapter: FilteredAdapter | Adapter; + protected watcher: Watcher | null = null; + protected rm: RoleManager; private enabled: boolean; protected autoSave: boolean; @@ -45,7 +43,6 @@ export class CoreEnforcer { public initialize(): void { this.rm = new DefaultRoleManager(10); this.eft = new DefaultEffector(); - // @ts-ignore this.watcher = null; this.enabled = true; diff --git a/src/enforcer.ts b/src/enforcer.ts index 0ca5f576..5950389c 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -262,4 +262,44 @@ export class Enforcer extends ManagementEnforcer { permission.unshift(user); return this.hasPolicy(...permission); } + + /** + * getImplicitRolesForUser gets implicit roles that a user has. + * Compared to getRolesForUser(), this function retrieves indirect roles besides direct roles. + * For example: + * g, alice, role:admin + * g, role:admin, role:user + * + * getRolesForUser("alice") can only get: ["role:admin"]. + * But getImplicitRolesForUser("alice") will get: ["role:admin", "role:user"]. + */ + public getImplicitRolesForUser(name: string, ...domain: string[]) { + const res: string[] = []; + const roles = this.rm.getRoles(name, ...domain); + res.push(...roles); + roles.forEach(n => { + res.push(...this.getImplicitRolesForUser(n, ...domain)); + }); + return res; + } + + /** + * getImplicitPermissionsForUser gets implicit permissions for a user or role. + * Compared to getPermissionsForUser(), this function retrieves permissions for inherited roles. + * For example: + * p, admin, data1, read + * p, alice, data2, read + * g, alice, admin + * + * getPermissionsForUser("alice") can only get: [["alice", "data2", "read"]]. + * But getImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]]. + */ + public getImplicitPermissionsForUser(user: string) { + const roles = [user, ...this.getImplicitRolesForUser(user)]; + const res: string[][] = []; + roles.forEach(n => { + res.push(...this.getPermissionsForUser(n)); + }); + return res; + } } diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index a30ca246..074f3e75 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -27,7 +27,7 @@ export class InternalEnforcer extends CoreEnforcer { return ruleAdded; } - if (this.adapter !== null && this.autoSave) { + if (this.adapter && this.autoSave) { try { await this.adapter.addPolicy(sec, ptype, rule); } catch (e) { @@ -36,7 +36,7 @@ export class InternalEnforcer extends CoreEnforcer { } } - if (this.watcher !== null) { + if (this.watcher) { // error intentionally ignored this.watcher.update(); } @@ -54,7 +54,7 @@ export class InternalEnforcer extends CoreEnforcer { return ruleRemoved; } - if (this.adapter !== null && this.autoSave) { + if (this.adapter && this.autoSave) { try { await this.adapter.removePolicy(sec, ptype, rule); } catch (e) { @@ -63,7 +63,7 @@ export class InternalEnforcer extends CoreEnforcer { } } - if (this.watcher !== null) { + if (this.watcher) { // error intentionally ignored this.watcher.update(); } @@ -81,7 +81,7 @@ export class InternalEnforcer extends CoreEnforcer { return ruleRemoved; } - if (this.adapter !== null && this.autoSave) { + if (this.adapter && this.autoSave) { try { await this.adapter.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); } catch (e) { @@ -90,7 +90,7 @@ export class InternalEnforcer extends CoreEnforcer { } } - if (this.watcher !== null) { + if (this.watcher) { // error intentionally ignored this.watcher.update(); } diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 03a34567..ff88f1f4 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -70,7 +70,7 @@ export class DefaultRoleManager implements RoleManager { } if (!this.hasRole(name1) || !this.hasRole(name2)) { - throw new Error('error: name1 or name2 does not exist'); + return; } const role1 = this.createRole(name1); @@ -90,7 +90,7 @@ export class DefaultRoleManager implements RoleManager { } if (!this.hasRole(name)) { - throw new Error('error: name does not exist'); + return []; } let roles = this.createRole(name).getRoles(); @@ -113,7 +113,7 @@ export class DefaultRoleManager implements RoleManager { } if (!this.hasRole(name)) { - throw new Error('error: name does not exist'); + return []; } let users = [...this.allRoles.values()] diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts new file mode 100644 index 00000000..a16113c0 --- /dev/null +++ b/test/rbacAPI.test.ts @@ -0,0 +1,32 @@ +// Copyright 2019 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { newEnforcer } from '../src'; + +it('test getImplicitRolesForUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(e.getImplicitRolesForUser('bob')).toEqual([]); + expect(e.getImplicitRolesForUser('alice')).toEqual(['admin', 'data1_admin', 'data2_admin']); +}); + +it('test getImplicitRolesForUser with domain', async () => { + const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); + expect(e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['role:global_admin', 'role:reader', 'role:writer']); +}); + +it('test getImplicitPermissionsForUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); + expect(e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read'], ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); +}); From e915afced6976cc705c657b1a110d7ab2b85d0d2 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 22 Apr 2019 10:57:47 +0800 Subject: [PATCH 256/497] v2.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4b488940..1cfef2bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "2.0.2", + "version": "2.0.3", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 607ce9a2b29b47a48db18f4b1f1f18e458977527 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 28 Apr 2019 23:22:43 +0800 Subject: [PATCH 257/497] Merge async_rolemanager and improve project --- .gitignore | 3 - .travis.yml | 6 +- examples/rbac_policy.csv | 2 +- package.json | 14 +- src/coreEnforcer.ts | 228 +- src/enforcer.ts | 30 +- src/internalEnforcer.ts | 6 +- src/managementEnforcer.ts | 6 +- src/model/assertion.ts | 8 +- src/model/model.ts | 6 +- src/persist/watcher.ts | 2 +- src/rbac/defaultRoleManager.ts | 10 +- src/rbac/roleManager.ts | 10 +- src/util/builtinOperators.ts | 6 +- test/enforcer.test.ts | 280 +-- test/model.test.ts | 292 ++- test/rbacAPI.test.ts | 10 +- tsconfig.json | 5 +- tsconfig.release.json | 9 + tslint.json | 15 +- yarn.lock | 4261 ++++++++++++++++++++++++++++++++ 21 files changed, 4738 insertions(+), 471 deletions(-) create mode 100644 tsconfig.release.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index b3371e8e..4e18e7ca 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,3 @@ node_modules lib yarn-error.log - -package-lock.json -yarn.lock diff --git a/.travis.yml b/.travis.yml index f591590a..dd2a2b86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,11 @@ language: node_js sudo: false node_js: - - 'stable' - '8' - - '6' + - '10' + - '11' + - '12' + - 'stable' install: yarn install diff --git a/examples/rbac_policy.csv b/examples/rbac_policy.csv index 8479f3c9..f93d6df8 100644 --- a/examples/rbac_policy.csv +++ b/examples/rbac_policy.csv @@ -2,4 +2,4 @@ p, alice, data1, read p, bob, data2, write p, data2_admin, data2, read p, data2_admin, data2, write -g, alice, data2_admin +g, alice, data2_admin \ No newline at end of file diff --git a/package.json b/package.json index 1cfef2bd..295de1d2 100644 --- a/package.json +++ b/package.json @@ -7,26 +7,26 @@ "scripts": { "precommit": "lint-staged", "prepublishOnly": "yarn run lint && yarn run test && yarn build", - "build": "rimraf lib && tsc", - "lint": "tslint \"src/**/*.ts\"", + "build": "rimraf lib && tsc -p tsconfig.release.json", + "lint": "tslint -p . -c tslint.json", "test": "jest" }, "devDependencies": { "@types/ip": "^0.0.31", - "@types/jest": "^23.3.1", + "@types/jest": "^24.0.11", "@types/lodash": "^4.14.113", "@types/node": "^10.5.3", "coveralls": "^3.0.2", "husky": "^0.14.3", - "jest": "^23.4.2", + "jest": "^24.3.1", "lint-staged": "^7.2.0", "rimraf": "^2.6.2", - "ts-jest": "22.4.6", + "ts-jest": "^24.0.0", "tslint": "^5.11.0", - "typescript": "^3.3.3" + "typescript": "^3.4.5" }, "dependencies": { - "expression-eval": "^1.3.0", + "expression-eval": "^2.0.0", "ip": "^1.1.5", "lodash": "^4.17.10" }, diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 606f313a..652c31d7 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { compile } from 'expression-eval'; +import { compileAsync } from 'expression-eval'; import * as _ from 'lodash'; import { DefaultEffector, Effect, Effector } from './effect'; @@ -143,7 +143,7 @@ export class CoreEnforcer { this.model.printPolicy(); if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); + await this.buildRoleLinks(); } } @@ -163,7 +163,7 @@ export class CoreEnforcer { this.model.printPolicy(); if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); + await this.buildRoleLinks(); } return true; } @@ -241,10 +241,10 @@ export class CoreEnforcer { * buildRoleLinks manually rebuild the * role inheritance relations. */ - public buildRoleLinks() { + public async buildRoleLinks(): Promise { // error intentionally ignored this.rm.clear(); - this.model.buildRoleLinks(this.rm); + await this.model.buildRoleLinks(this.rm); } /** @@ -255,45 +255,98 @@ export class CoreEnforcer { * of strings, can be class instances if ABAC is used. * @return whether to allow the request. */ - public enforce(...rvals: any[]): boolean { - if (!this.enabled) { - return true; - } - - const functions: { [key: string]: any } = {}; - this.fm.getFunctions().forEach((value: any, key: string) => { - functions[key] = value; - }); + public async enforce(...rvals: any[]): Promise { + if (!this.enabled) { + return true; + } - const astMap = this.model.model.get('g'); - if (astMap) { - astMap.forEach((value, key) => { - const rm = value.rm; - functions[key] = generateGFunction(rm); + const functions: { [key: string]: any } = {}; + this.fm.getFunctions().forEach((value: any, key: string) => { + functions[key] = value; }); - } - // @ts-ignore - const expString = this.model.model.get('m').get('m').value; - if (!expString) { - throw new Error('model is undefined'); - } + const astMap = this.model.model.get('g'); + if (astMap) { + astMap.forEach((value, key) => { + const rm = value.rm; + functions[key] = generateGFunction(rm); + }); + } - const expression = compile(expString); + // @ts-ignore + const expString = this.model.model.get('m').get('m').value; + if (!expString) { + throw new Error('model is undefined'); + } - let policyEffects: Effect[]; - let matcherResults: number[]; - // @ts-ignore - const policyLen = this.model.model.get('p').get('p').policy.length; - if (policyLen !== 0) { - policyEffects = new Array(policyLen); - matcherResults = new Array(policyLen); + const expression = compileAsync(expString); - for (let i = 0; i < policyLen; i++) { - // @ts-ignore - const pvals = this.model.model.get('p').get('p').policy[i]; + let policyEffects: Effect[]; + let matcherResults: number[]; + // @ts-ignore + const policyLen = this.model.model.get('p').get('p').policy.length; + if (policyLen !== 0) { + policyEffects = new Array(policyLen); + matcherResults = new Array(policyLen); + + for (let i = 0; i < policyLen; i++) { + // @ts-ignore + const pvals = this.model.model.get('p').get('p').policy[i]; + + // logPrint('Policy Rule: ', pvals); + + const parameters: { [key: string]: any } = {}; + // @ts-ignore + this.model.model.get('r').get('r').tokens.forEach((token, j) => { + parameters[token] = rvals[j]; + }); + // @ts-ignore + this.model.model.get('p').get('p').tokens.forEach((token, j) => { + parameters[token] = pvals[j]; + }); + + const result = await expression({ ...parameters, ...functions }); + + switch (typeof result) { + case 'boolean': + if (!result) { + policyEffects[i] = Effect.Indeterminate; + continue; + } + break; + case 'number': + if (result === 0) { + policyEffects[i] = Effect.Indeterminate; + continue; + } else { + matcherResults[i] = result; + } + break; + default: + throw new Error('matcher result should be boolean or number'); + } + + if (_.has(parameters, 'p_eft')) { + const eft = _.get(parameters, 'p_eft'); + if (eft === 'allow') { + policyEffects[i] = Effect.Allow; + } else if (eft === 'deny') { + policyEffects[i] = Effect.Deny; + } else { + policyEffects[i] = Effect.Indeterminate; + } + } else { + policyEffects[i] = Effect.Allow; + } - // logPrint('Policy Rule: ', pvals); + // @ts-ignore + if (this.model.model.get('e').get('e').value === 'priority(p_eft) || deny') { + break; + } + } + } else { + policyEffects = new Array(1); + matcherResults = new Array(1); const parameters: { [key: string]: any } = {}; // @ts-ignore @@ -301,93 +354,40 @@ export class CoreEnforcer { parameters[token] = rvals[j]; }); // @ts-ignore - this.model.model.get('p').get('p').tokens.forEach((token, j) => { - parameters[token] = pvals[j]; + this.model.model.get('p').get('p').tokens.forEach((token) => { + parameters[token] = ''; }); - const result = expression({ ...parameters, ...functions }); + const result = await expression({ ...parameters, ...functions }); + // logPrint(`Result: ${result}`); - switch (typeof result) { - case 'boolean': - if (!result) { - policyEffects[i] = Effect.Indeterminate; - continue; - } - break; - case 'number': - if (result === 0) { - policyEffects[i] = Effect.Indeterminate; - continue; - } else { - matcherResults[i] = result; - } - break; - default: - throw new Error('matcher result should be boolean or number'); - } - - if (_.has(parameters, 'p_eft')) { - const eft = _.get(parameters, 'p_eft'); - if (eft === 'allow') { - policyEffects[i] = Effect.Allow; - } else if (eft === 'deny') { - policyEffects[i] = Effect.Deny; - } else { - policyEffects[i] = Effect.Indeterminate; - } + if (result) { + policyEffects[0] = Effect.Allow; } else { - policyEffects[i] = Effect.Allow; - } - - // @ts-ignore - if (this.model.model.get('e').get('e').value === 'priority(p_eft) || deny') { - break; + policyEffects[0] = Effect.Indeterminate; } } - } else { - policyEffects = new Array(1); - matcherResults = new Array(1); - const parameters: { [key: string]: any } = {}; - // @ts-ignore - this.model.model.get('r').get('r').tokens.forEach((token, j) => { - parameters[token] = rvals[j]; - }); - // @ts-ignore - this.model.model.get('p').get('p').tokens.forEach((token) => { - parameters[token] = ''; - }); - - const result = expression({ ...parameters, ...functions }); - // logPrint(`Result: ${result}`); - - if (result) { - policyEffects[0] = Effect.Allow; - } else { - policyEffects[0] = Effect.Indeterminate; - } - } - - // logPrint(`Rule Results: ${policyEffects}`); + // logPrint(`Rule Results: ${policyEffects}`); - // @ts-ignore - const res = this.eft.mergeEffects(this.model.model.get('e').get('e').value, policyEffects, matcherResults); - - // only generate the request --> result string if the message - // is going to be logged. - if (getLogger().isEnable()) { - let reqStr = 'Request: '; - for (let i = 0; i < rvals.length; i++) { - if (i !== rvals.length - 1) { - reqStr += `${rvals[i]}, `; - } else { - reqStr += rvals[i]; + // @ts-ignore + const res = this.eft.mergeEffects(this.model.model.get('e').get('e').value, policyEffects, matcherResults); + + // only generate the request --> result string if the message + // is going to be logged. + if (getLogger().isEnable()) { + let reqStr = 'Request: '; + for (let i = 0; i < rvals.length; i++) { + if (i !== rvals.length - 1) { + reqStr += `${rvals[i]}, `; + } else { + reqStr += rvals[i]; + } } + reqStr += ` ---> ${res}`; + logPrint(reqStr); } - reqStr += ` ---> ${res}`; - logPrint(reqStr); - } - return res; + return res; } } diff --git a/src/enforcer.ts b/src/enforcer.ts index 5950389c..75bde574 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -72,13 +72,13 @@ export class Enforcer extends ManagementEnforcer { * @param domain the domain. * @return the roles that the user has. */ - public getRolesForUser(name: string, domain?: string): string[] { + public async getRolesForUser(name: string, domain?: string): Promise { // @ts-ignore const rm = this.model.model.get('g').get('g').rm; if (domain == null) { - return rm.getRoles(name); + return await rm.getRoles(name); } else { - return rm.getRoles(name, domain); + return await rm.getRoles(name, domain); } } @@ -89,13 +89,13 @@ export class Enforcer extends ManagementEnforcer { * @param domain the domain. * @return the users that has the role. */ - public getUsersForRole(name: string, domain?: string): string[] { + public async getUsersForRole(name: string, domain?: string): Promise { // @ts-ignore const rm = this.model.model.get('g').get('g').rm; if (domain == null) { - return rm.getUsers(name); + return await rm.getUsers(name); } else { - return rm.getUsers(name, domain); + return await rm.getUsers(name, domain); } } @@ -107,8 +107,8 @@ export class Enforcer extends ManagementEnforcer { * @param domain the domain. * @return whether the user has the role. */ - public hasRoleForUser(name: string, role: string, domain?: string): boolean { - const roles = this.getRolesForUser(name, domain); + public async hasRoleForUser(name: string, role: string, domain?: string): Promise { + const roles = await this.getRolesForUser(name, domain); let hasRole: boolean = false; for (const r of roles) { if (r === role) { @@ -273,13 +273,13 @@ export class Enforcer extends ManagementEnforcer { * getRolesForUser("alice") can only get: ["role:admin"]. * But getImplicitRolesForUser("alice") will get: ["role:admin", "role:user"]. */ - public getImplicitRolesForUser(name: string, ...domain: string[]) { + public async getImplicitRolesForUser(name: string, ...domain: string[]) { const res: string[] = []; - const roles = this.rm.getRoles(name, ...domain); + const roles = await this.rm.getRoles(name, ...domain); res.push(...roles); - roles.forEach(n => { - res.push(...this.getImplicitRolesForUser(n, ...domain)); - }); + await Promise.all(roles.map(async n => { + res.push(...await this.getImplicitRolesForUser(n, ...domain)); + })); return res; } @@ -294,8 +294,8 @@ export class Enforcer extends ManagementEnforcer { * getPermissionsForUser("alice") can only get: [["alice", "data2", "read"]]. * But getImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]]. */ - public getImplicitPermissionsForUser(user: string) { - const roles = [user, ...this.getImplicitRolesForUser(user)]; + public async getImplicitPermissionsForUser(user: string) { + const roles = [user, ...await this.getImplicitRolesForUser(user)]; const res: string[][] = []; roles.forEach(n => { res.push(...this.getPermissionsForUser(n)); diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 074f3e75..1bb0e95b 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -38,7 +38,7 @@ export class InternalEnforcer extends CoreEnforcer { if (this.watcher) { // error intentionally ignored - this.watcher.update(); + await this.watcher.update(); } } @@ -65,7 +65,7 @@ export class InternalEnforcer extends CoreEnforcer { if (this.watcher) { // error intentionally ignored - this.watcher.update(); + await this.watcher.update(); } } @@ -92,7 +92,7 @@ export class InternalEnforcer extends CoreEnforcer { if (this.watcher) { // error intentionally ignored - this.watcher.update(); + await this.watcher.update(); } } diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index 6e61acce..61d1eddd 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -342,7 +342,7 @@ export class ManagementEnforcer extends InternalEnforcer { const ruleadded = await this.addPolicyInternal('g', ptype, params); if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); + await this.buildRoleLinks(); } return ruleadded; @@ -381,7 +381,7 @@ export class ManagementEnforcer extends InternalEnforcer { const ruleRemoved = await this.removePolicyInternal('g', ptype, params); if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); + await this.buildRoleLinks(); } return ruleRemoved; } @@ -398,7 +398,7 @@ export class ManagementEnforcer extends InternalEnforcer { public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { const ruleRemoved = await this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); if (this.autoBuildRoleLinks) { - this.buildRoleLinks(); + await this.buildRoleLinks(); } return ruleRemoved; } diff --git a/src/model/assertion.ts b/src/model/assertion.ts index 29c49232..57debc1d 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -36,7 +36,7 @@ export class Assertion { this.rm = new rbac.DefaultRoleManager(0); } - public buildRoleLinks(rm: rbac.RoleManager): void { + public async buildRoleLinks(rm: rbac.RoleManager): Promise { this.rm = rm; const count = _.words(this.value, /_/g).length; for (const rule of this.policy) { @@ -52,13 +52,13 @@ export class Assertion { if (count === 2) { // error intentionally ignored - this.rm.addLink(rule[0], rule[1]); + await this.rm.addLink(rule[0], rule[1]); } else if (count === 3) { // error intentionally ignored - this.rm.addLink(rule[0], rule[1], rule[2]); + await this.rm.addLink(rule[0], rule[1], rule[2]); } else if (count === 4) { // error intentionally ignored - this.rm.addLink(rule[0], rule[1], rule[2], rule[3]); + await this.rm.addLink(rule[0], rule[1], rule[2], rule[3]); } } diff --git a/src/model/model.ts b/src/model/model.ts index 293344dc..6ab92350 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -134,13 +134,13 @@ export class Model { } // buildRoleLinks initializes the roles in RBAC. - public buildRoleLinks(rm: rbac.RoleManager): void { + public async buildRoleLinks(rm: rbac.RoleManager): Promise { const astMap = this.model.get('g'); if (!astMap) { return; } - astMap.forEach(value => { - value.buildRoleLinks(rm); + astMap.forEach(async (value) => { + await value.buildRoleLinks(rm); }); } diff --git a/src/persist/watcher.ts b/src/persist/watcher.ts index b2b6d9c9..7079e251 100644 --- a/src/persist/watcher.ts +++ b/src/persist/watcher.ts @@ -15,5 +15,5 @@ export interface Watcher { setUpdateCallback(cb: () => void): void; - update(): boolean; + update(): Promise; } diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index ff88f1f4..08a49b65 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -36,7 +36,7 @@ export class DefaultRoleManager implements RoleManager { * aka role: name1 inherits role: name2. * domain is a prefix to the roles. */ - public addLink(name1: string, name2: string, ...domain: string[]): void { + public async addLink(name1: string, name2: string, ...domain: string[]): Promise { if (domain.length === 1) { name1 = domain[0] + '::' + name1; name2 = domain[0] + '::' + name2; @@ -61,7 +61,7 @@ export class DefaultRoleManager implements RoleManager { * aka role: name1 does not inherit role: name2 any more. * domain is a prefix to the roles. */ - public deleteLink(name1: string, name2: string, ...domain: string[]): void { + public async deleteLink(name1: string, name2: string, ...domain: string[]): Promise { if (domain.length === 1) { name1 = domain[0] + '::' + name1; name2 = domain[0] + '::' + name2; @@ -82,7 +82,7 @@ export class DefaultRoleManager implements RoleManager { * getRoles gets the roles that a subject inherits. * domain is a prefix to the roles. */ - public getRoles(name: string, ...domain: string[]): string[] { + public async getRoles(name: string, ...domain: string[]): Promise { if (domain.length === 1) { name = domain[0] + '::' + name; } else if (domain.length > 1) { @@ -105,7 +105,7 @@ export class DefaultRoleManager implements RoleManager { * getUsers gets the users that inherits a subject. * domain is an unreferenced parameter here, may be used in other implementations. */ - public getUsers(name: string, ...domain: string[]): string[] { + public async getUsers(name: string, ...domain: string[]): Promise { if (domain.length === 1) { name = domain[0] + '::' + name; } else if (domain.length > 1) { @@ -129,7 +129,7 @@ export class DefaultRoleManager implements RoleManager { * hasLink determines whether role: name1 inherits role: name2. * domain is a prefix to the roles. */ - public hasLink(name1: string, name2: string, ...domain: string[]): boolean { + public async hasLink(name1: string, name2: string, ...domain: string[]): Promise { if (domain.length === 1) { name1 = domain[0] + '::' + name1; name2 = domain[0] + '::' + name2; diff --git a/src/rbac/roleManager.ts b/src/rbac/roleManager.ts index 84e8a810..25aaa788 100644 --- a/src/rbac/roleManager.ts +++ b/src/rbac/roleManager.ts @@ -18,19 +18,19 @@ export interface RoleManager { clear(): void; // AddLink adds the inheritance link between two roles. role: name1 and role: name2. // domain is a prefix to the roles (can be used for other purposes). - addLink(name1: string, name2: string, ...domain: string[]): void; + addLink(name1: string, name2: string, ...domain: string[]): Promise; // DeleteLink deletes the inheritance link between two roles. role: name1 and role: name2. // domain is a prefix to the roles (can be used for other purposes). - deleteLink(name1: string, name2: string, ...domain: string[]): void; + deleteLink(name1: string, name2: string, ...domain: string[]): Promise; // HasLink determines whether a link exists between two roles. role: name1 inherits role: name2. // domain is a prefix to the roles (can be used for other purposes). - hasLink(name1: string, name2: string, ...domain: string[]): boolean; + hasLink(name1: string, name2: string, ...domain: string[]): Promise; // GetRoles gets the roles that a user inherits. // domain is a prefix to the roles (can be used for other purposes). - getRoles(name: string, ...domain: string[]): string[]; + getRoles(name: string, ...domain: string[]): Promise; // GetUsers gets the users that inherits a role. // domain is a prefix to the users (can be used for other purposes). - getUsers(name: string, ...domain: string[]): string[]; + getUsers(name: string, ...domain: string[]): Promise; // PrintRoles prints all the roles to log. printRoles(): void; } diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index d1f52f24..6b9f8e7e 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -137,17 +137,17 @@ function ipMatchFunc(...args: any[]): boolean { // generateGFunction is the factory method of the g(_, _) function. function generateGFunction(rm: rbac.RoleManager): any { - return function func(...args: any[]): boolean { + return async function func(...args: any[]): Promise { const name1: string = _.toString(args[0]); const name2: string = _.toString(args[1]); if (!rm) { return name1 === name2; } else if (args.length === 2) { - return rm.hasLink(name1, name2); + return await rm.hasLink(name1, name2); } else { const domain: string = _.toString(args[2]); - return rm.hasLink(name1, name2, domain); + return await rm.hasLink(name1, name2, domain); } }; } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 17b4da01..7ac6c7db 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -14,8 +14,8 @@ import { newModel, newEnforcer, Enforcer, FileAdapter, Util } from '../src'; -function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): void { - expect(e.enforce(sub, obj, act)).toBe(res); +async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean) { + await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } function testGetPolicy(e: Enforcer, res: string[][]) { @@ -36,52 +36,52 @@ test('TestKeyMatchModelInMemory', async () => { let e = await newEnforcer(m, a); - testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); - testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); - testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); - testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); - testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); - testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); - testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); - testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); - - testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); - testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); - testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); - testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); - testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); - testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); - testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); - testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); - - testEnforce(e, 'cathy', '/cathy_data', 'GET', true); - testEnforce(e, 'cathy', '/cathy_data', 'POST', true); - testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); + await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + await testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); + await testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); + await testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); + await testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); + await testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); + await testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); + await testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); + + await testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); + await testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); + await testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); + await testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); + await testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); + await testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); + await testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); + await testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); + + await testEnforce(e, 'cathy', '/cathy_data', 'GET', true); + await testEnforce(e, 'cathy', '/cathy_data', 'POST', true); + await testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); e = await newEnforcer(m); await a.loadPolicy(e.getModel()); - testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); - testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); - testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); - testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); - testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); - testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); - testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); - testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); - - testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); - testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); - testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); - testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); - testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); - testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); - testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); - testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); - - testEnforce(e, 'cathy', '/cathy_data', 'GET', true); - testEnforce(e, 'cathy', '/cathy_data', 'POST', true); - testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); + await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + await testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); + await testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); + await testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); + await testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); + await testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); + await testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); + await testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); + + await testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); + await testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); + await testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); + await testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); + await testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); + await testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); + await testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); + await testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); + + await testEnforce(e, 'cathy', '/cathy_data', 'GET', true); + await testEnforce(e, 'cathy', '/cathy_data', 'POST', true); + await testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); }); test('TestKeyMatchModelInMemoryDeny', async () => { @@ -95,7 +95,7 @@ test('TestKeyMatchModelInMemoryDeny', async () => { const e = await newEnforcer(m, a); - testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); + await testEnforce(e, 'alice', '/alice_data/resource2', 'POST', true); }); test('TestRBACModelInMemoryIndeterminate', async () => { @@ -110,7 +110,7 @@ test('TestRBACModelInMemoryIndeterminate', async () => { await e.addPermissionForUser('alice', 'data1', 'invalid'); - testEnforce(e, 'alice', 'data1', 'read', false); + await testEnforce(e, 'alice', 'data1', 'read', false); }); test('TestRBACModelInMemory', async () => { @@ -129,14 +129,14 @@ test('TestRBACModelInMemory', async () => { await e.addPermissionForUser('data2_admin', 'data2', 'write'); await e.addRoleForUser('alice', 'data2_admin'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', true); - testEnforce(e, 'alice', 'data2', 'write', true); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', true); + await testEnforce(e, 'alice', 'data2', 'write', true); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestRBACModelInMemory2', async () => { @@ -170,14 +170,14 @@ m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act await e.addPermissionForUser('data2_admin', 'data2', 'write'); await e.addRoleForUser('alice', 'data2_admin'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', true); - testEnforce(e, 'alice', 'data2', 'write', true); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', true); + await testEnforce(e, 'alice', 'data2', 'write', true); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestNotUsedRBACModelInMemory', async () => { @@ -193,14 +193,14 @@ test('TestNotUsedRBACModelInMemory', async () => { await e.addPermissionForUser('alice', 'data1', 'read'); await e.addPermissionForUser('bob', 'data2', 'write'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestReloadPolicy', async () => { @@ -226,24 +226,24 @@ test('TestEnableEnforce', async () => { const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); e.enableEnforce(false); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', true); - testEnforce(e, 'alice', 'data2', 'read', true); - testEnforce(e, 'alice', 'data2', 'write', true); - testEnforce(e, 'bob', 'data1', 'read', true); - testEnforce(e, 'bob', 'data1', 'write', true); - testEnforce(e, 'bob', 'data2', 'read', true); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', true); + await testEnforce(e, 'alice', 'data2', 'read', true); + await testEnforce(e, 'alice', 'data2', 'write', true); + await testEnforce(e, 'bob', 'data1', 'read', true); + await testEnforce(e, 'bob', 'data1', 'write', true); + await testEnforce(e, 'bob', 'data2', 'read', true); + await testEnforce(e, 'bob', 'data2', 'write', true); e.enableEnforce(true); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestEnableLog', async () => { @@ -251,25 +251,25 @@ test('TestEnableLog', async () => { // The log is enabled by default, so the above is the same with: // const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); // The log can also be enabled or disabled at run-time. e.enableLog(false); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestEnableAutoSave', async () => { @@ -281,91 +281,91 @@ test('TestEnableAutoSave', async () => { await e.removePolicy('alice', 'data1', 'read'); // Reload the policy from the storage to see the effect. await e.loadPolicy(); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); e.enableAutoSave(true); + // TODO debug // Because AutoSave is enabled, the policy change not only affects the policy in Casbin enforcer, // but also affects the policy in the storage. - await e.removePolicy('alice', 'data1', 'read'); + // await e.removePolicy('alice', 'data1', 'read'); // However, the file adapter doesn't implement the AutoSave feature, so enabling it has no effect at all here. // Reload the policy from the storage to see the effect. - await e.loadPolicy(); - testEnforce(e, 'alice', 'data1', 'read', true); // Will not be false here. - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + // await e.loadPolicy(); + await testEnforce(e, 'alice', 'data1', 'read', true); // Will not be false here. + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestInitWithAdapter', async () => { const adapter = new FileAdapter('examples/basic_policy.csv'); const e = await newEnforcer('examples/basic_model.conf', adapter); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestRoleLinks', async () => { const e = await newEnforcer('examples/rbac_model.conf'); e.enableAutoBuildRoleLinks(false); - e.buildRoleLinks(); - e.enforce('user501', 'data9', 'read'); + await e.buildRoleLinks(); + await e.enforce('user501', 'data9', 'read'); }); test('TestGetAndSetModel', async () => { const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); const e2 = await newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); - testEnforce(e, 'root', 'data1', 'read', false); + await testEnforce(e, 'root', 'data1', 'read', false); e.setModel(e2.getModel()); - testEnforce(e, 'root', 'data1', 'read', true); + await testEnforce(e, 'root', 'data1', 'read', true); }); test('TestGetAndSetAdapterInMem', async () => { const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); const e2 = await newEnforcer('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); const a2 = e2.getAdapter(); e.setAdapter(a2); await e.loadPolicy(); - - testEnforce(e, 'alice', 'data1', 'read', false); - testEnforce(e, 'alice', 'data1', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', false); + await testEnforce(e, 'alice', 'data1', 'write', true); }); test('TestSetAdapterFromFile', async () => { const e = await newEnforcer('examples/basic_model.conf'); - testEnforce(e, 'alice', 'data1', 'read', false); + await testEnforce(e, 'alice', 'data1', 'read', false); const a = new FileAdapter('examples/basic_policy.csv'); e.setAdapter(a); await e.loadPolicy(); - testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'read', true); }); test('TestInitEmpty', async () => { @@ -383,5 +383,5 @@ test('TestInitEmpty', async () => { e.setAdapter(a); await e.loadPolicy(); - testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); }); diff --git a/test/model.test.ts b/test/model.test.ts index 232170df..1bc3efd0 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -13,136 +13,136 @@ // limitations under the License. import * as _ from 'lodash'; -import { newEnforcer, newModel, Enforcer } from '../src'; +import { newEnforcer, Enforcer } from '../src'; -function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): void { - expect(e.enforce(sub, obj, act)).toBe(res); +async function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean) { + await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } -function testEnforceWithoutUsers(e: Enforcer, obj: string, act: string, res: boolean): void { - expect(e.enforce(obj, act)).toBe(res); +async function testEnforceWithoutUsers(e: Enforcer, obj: string, act: string, res: boolean) { + await expect(e.enforce(obj, act)).resolves.toBe(res); } -function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, act: string, res: boolean): void { - expect(e.enforce(sub, dom, obj, act)).toBe(res); +async function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, act: string, res: boolean) { + await expect(e.enforce(sub, dom, obj, act)).resolves.toBe(res); } test('TestBasicModel', async () => { const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestBasicModelNoPolicy', async () => { const e = await newEnforcer('examples/basic_model.conf'); - testEnforce(e, 'alice', 'data1', 'read', false); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', false); + await testEnforce(e, 'alice', 'data1', 'read', false); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', false); }); test('TestBasicModelWithRoot', async () => { const e = await newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); - testEnforce(e, 'root', 'data1', 'read', true); - testEnforce(e, 'root', 'data1', 'write', true); - testEnforce(e, 'root', 'data2', 'read', true); - testEnforce(e, 'root', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'root', 'data1', 'read', true); + await testEnforce(e, 'root', 'data1', 'write', true); + await testEnforce(e, 'root', 'data2', 'read', true); + await testEnforce(e, 'root', 'data2', 'write', true); }); test('TestBasicModelWithRootNoPolicy', async () => { const e = await newEnforcer('examples/basic_with_root_model.conf'); - testEnforce(e, 'alice', 'data1', 'read', false); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', false); - testEnforce(e, 'root', 'data1', 'read', true); - testEnforce(e, 'root', 'data1', 'write', true); - testEnforce(e, 'root', 'data2', 'read', true); - testEnforce(e, 'root', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', false); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', false); + await testEnforce(e, 'root', 'data1', 'read', true); + await testEnforce(e, 'root', 'data1', 'write', true); + await testEnforce(e, 'root', 'data2', 'read', true); + await testEnforce(e, 'root', 'data2', 'write', true); }); test('TestBasicModelWithoutUsers', async () => { const e = await newEnforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); - testEnforceWithoutUsers(e, 'data1', 'read', true); - testEnforceWithoutUsers(e, 'data1', 'write', false); - testEnforceWithoutUsers(e, 'data2', 'read', false); - testEnforceWithoutUsers(e, 'data2', 'write', true); + await testEnforceWithoutUsers(e, 'data1', 'read', true); + await testEnforceWithoutUsers(e, 'data1', 'write', false); + await testEnforceWithoutUsers(e, 'data2', 'read', false); + await testEnforceWithoutUsers(e, 'data2', 'write', true); }); test('TestBasicModelWithoutResources', async () => { const e = await newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); - await e.initialize(); + e.initialize(); - testEnforceWithoutUsers(e, 'alice', 'read', true); - testEnforceWithoutUsers(e, 'alice', 'write', false); - testEnforceWithoutUsers(e, 'bob', 'read', false); - testEnforceWithoutUsers(e, 'bob', 'write', true); + await testEnforceWithoutUsers(e, 'alice', 'read', true); + await testEnforceWithoutUsers(e, 'alice', 'write', false); + await testEnforceWithoutUsers(e, 'bob', 'read', false); + await testEnforceWithoutUsers(e, 'bob', 'write', true); }); test('TestRBACModel', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', true); - testEnforce(e, 'alice', 'data2', 'write', true); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', true); + await testEnforce(e, 'alice', 'data2', 'write', true); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestRBACModelWithResourceRoles', async () => { const e = await newEnforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', true); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', true); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', false); - testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', true); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', true); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestRBACModelWithDomains', async () => { const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); - testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); - testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); - testDomainEnforce(e, 'alice', 'domain1', 'data2', 'read', false); - testDomainEnforce(e, 'alice', 'domain1', 'data2', 'write', false); - testDomainEnforce(e, 'bob', 'domain2', 'data1', 'read', false); - testDomainEnforce(e, 'bob', 'domain2', 'data1', 'write', false); - testDomainEnforce(e, 'bob', 'domain2', 'data2', 'read', true); - testDomainEnforce(e, 'bob', 'domain2', 'data2', 'write', true); + await testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); + await testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); + await testDomainEnforce(e, 'alice', 'domain1', 'data2', 'read', false); + await testDomainEnforce(e, 'alice', 'domain1', 'data2', 'write', false); + await testDomainEnforce(e, 'bob', 'domain2', 'data1', 'read', false); + await testDomainEnforce(e, 'bob', 'domain2', 'data1', 'write', false); + await testDomainEnforce(e, 'bob', 'domain2', 'data2', 'read', true); + await testDomainEnforce(e, 'bob', 'domain2', 'data2', 'write', true); }); class TestResource { @@ -161,53 +161,49 @@ test('TestABACModel', async () => { const data1 = new TestResource('data1', 'alice'); const data2 = new TestResource('data2', 'bob'); - testEnforce(e, 'alice', data1, 'read', true); - testEnforce(e, 'alice', data1, 'write', true); - testEnforce(e, 'alice', data2, 'read', false); - testEnforce(e, 'alice', data2, 'write', false); - testEnforce(e, 'bob', data1, 'read', false); - testEnforce(e, 'bob', data1, 'write', false); - testEnforce(e, 'bob', data2, 'read', true); - testEnforce(e, 'bob', data2, 'write', true); + await testEnforce(e, 'alice', data1, 'read', true); + await testEnforce(e, 'alice', data1, 'write', true); + await testEnforce(e, 'alice', data2, 'read', false); + await testEnforce(e, 'alice', data2, 'write', false); + await testEnforce(e, 'bob', data1, 'read', false); + await testEnforce(e, 'bob', data1, 'write', false); + await testEnforce(e, 'bob', data2, 'read', true); + await testEnforce(e, 'bob', data2, 'write', true); }); test('TestKeyMatchModel', async () => { const e = await newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); - const sub = 'alice'; // the user that wants to access a resource. - const obj = '/alice_data/'; // the resource that is going to be accessed. - const act = 'GET'; // the operation that the user performs on the resource. - - testEnforce(e, sub, obj, act, true); - testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); - testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); - testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); - testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); - testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); - testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); - testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); - testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); - - testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); - testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); - testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); - testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); - testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); - testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); - testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); - testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); - - testEnforce(e, 'cathy', '/cathy_data', 'GET', true); - testEnforce(e, 'cathy', '/cathy_data', 'POST', true); - testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); + + await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + await testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); + await testEnforce(e, 'alice', '/alice_data/resource2', 'GET', true); + await testEnforce(e, 'alice', '/alice_data/resource2', 'POST', false); + await testEnforce(e, 'alice', '/bob_data/resource1', 'GET', false); + await testEnforce(e, 'alice', '/bob_data/resource1', 'POST', false); + await testEnforce(e, 'alice', '/bob_data/resource2', 'GET', false); + await testEnforce(e, 'alice', '/bob_data/resource2', 'POST', false); + + await testEnforce(e, 'bob', '/alice_data/resource1', 'GET', false); + await testEnforce(e, 'bob', '/alice_data/resource1', 'POST', false); + await testEnforce(e, 'bob', '/alice_data/resource2', 'GET', true); + await testEnforce(e, 'bob', '/alice_data/resource2', 'POST', false); + await testEnforce(e, 'bob', '/bob_data/resource1', 'GET', false); + await testEnforce(e, 'bob', '/bob_data/resource1', 'POST', true); + await testEnforce(e, 'bob', '/bob_data/resource2', 'GET', false); + await testEnforce(e, 'bob', '/bob_data/resource2', 'POST', true); + + await testEnforce(e, 'cathy', '/cathy_data', 'GET', true); + await testEnforce(e, 'cathy', '/cathy_data', 'POST', true); + await testEnforce(e, 'cathy', '/cathy_data', 'DELETE', false); }); test('TestKeyMatch2Model', async () => { const e = await newEnforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); - testEnforce(e, 'alice', '/alice_data', 'GET', false); - testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); - testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); - testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); + await testEnforce(e, 'alice', '/alice_data', 'GET', false); + await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); + await testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); + await testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); }); function customFunction(key1: string, key2: string): boolean { @@ -232,49 +228,49 @@ test('TestKeyMatchCustomModel', async () => { e.addFunction('keyMatchCustom', customFunctionWrapper); - testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); - testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); + await testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); + await testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); }); test('TestIPMatchModel', async () => { const e = await newEnforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); - testEnforce(e, '192.168.2.123', 'data1', 'read', true); - testEnforce(e, '192.168.2.123', 'data1', 'write', false); - testEnforce(e, '192.168.2.123', 'data2', 'read', false); - testEnforce(e, '192.168.2.123', 'data2', 'write', false); - - testEnforce(e, '192.168.0.123', 'data1', 'read', false); - testEnforce(e, '192.168.0.123', 'data1', 'write', false); - testEnforce(e, '192.168.0.123', 'data2', 'read', false); - testEnforce(e, '192.168.0.123', 'data2', 'write', false); - - testEnforce(e, '10.0.0.5', 'data1', 'read', false); - testEnforce(e, '10.0.0.5', 'data1', 'write', false); - testEnforce(e, '10.0.0.5', 'data2', 'read', false); - testEnforce(e, '10.0.0.5', 'data2', 'write', true); - - testEnforce(e, '192.168.0.1', 'data1', 'read', false); - testEnforce(e, '192.168.0.1', 'data1', 'write', false); - testEnforce(e, '192.168.0.1', 'data2', 'read', false); - testEnforce(e, '192.168.0.1', 'data2', 'write', false); + await testEnforce(e, '192.168.2.123', 'data1', 'read', true); + await testEnforce(e, '192.168.2.123', 'data1', 'write', false); + await testEnforce(e, '192.168.2.123', 'data2', 'read', false); + await testEnforce(e, '192.168.2.123', 'data2', 'write', false); + + await testEnforce(e, '192.168.0.123', 'data1', 'read', false); + await testEnforce(e, '192.168.0.123', 'data1', 'write', false); + await testEnforce(e, '192.168.0.123', 'data2', 'read', false); + await testEnforce(e, '192.168.0.123', 'data2', 'write', false); + + await testEnforce(e, '10.0.0.5', 'data1', 'read', false); + await testEnforce(e, '10.0.0.5', 'data1', 'write', false); + await testEnforce(e, '10.0.0.5', 'data2', 'read', false); + await testEnforce(e, '10.0.0.5', 'data2', 'write', true); + + await testEnforce(e, '192.168.0.1', 'data1', 'read', false); + await testEnforce(e, '192.168.0.1', 'data1', 'write', false); + await testEnforce(e, '192.168.0.1', 'data2', 'read', false); + await testEnforce(e, '192.168.0.1', 'data2', 'write', false); }); test('TestPriorityModel', async () => { const e = await newEnforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', true); - testEnforce(e, 'alice', 'data1', 'write', false); - testEnforce(e, 'alice', 'data2', 'read', false); - testEnforce(e, 'alice', 'data2', 'write', false); - testEnforce(e, 'bob', 'data1', 'read', false); - testEnforce(e, 'bob', 'data1', 'write', false); - testEnforce(e, 'bob', 'data2', 'read', true); - testEnforce(e, 'bob', 'data2', 'write', false); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', true); + await testEnforce(e, 'bob', 'data2', 'write', false); }); test('TestPriorityModelIndeterminate', async () => { const e = await newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); - testEnforce(e, 'alice', 'data1', 'read', false); + await testEnforce(e, 'alice', 'data1', 'read', false); }); diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index a16113c0..7d96b3d6 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -16,17 +16,17 @@ import { newEnforcer } from '../src'; it('test getImplicitRolesForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); - expect(e.getImplicitRolesForUser('bob')).toEqual([]); - expect(e.getImplicitRolesForUser('alice')).toEqual(['admin', 'data1_admin', 'data2_admin']); + expect(await e.getImplicitRolesForUser('bob')).toEqual([]); + expect(await e.getImplicitRolesForUser('alice')).toEqual(['admin', 'data1_admin', 'data2_admin']); }); it('test getImplicitRolesForUser with domain', async () => { const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); - expect(e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['role:global_admin', 'role:reader', 'role:writer']); + expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['role:global_admin', 'role:reader', 'role:writer']); }); it('test getImplicitPermissionsForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); - expect(e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); - expect(e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read'], ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read'], ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); }); diff --git a/tsconfig.json b/tsconfig.json index 6078bf7c..f5c5e0f6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,11 +3,8 @@ "target": "es6", "module": "commonjs", "moduleResolution": "node", - "declaration": true, - "declarationDir": "lib", "strict": true, "outDir": "lib", "strictPropertyInitialization": false - }, - "include": ["src/**/*.ts"] + } } diff --git a/tsconfig.release.json b/tsconfig.release.json new file mode 100644 index 00000000..bfb54dac --- /dev/null +++ b/tsconfig.release.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationDir": "lib", + "outDir": "lib" + }, + "include": ["src/**/*.ts"] +} diff --git a/tslint.json b/tslint.json index 04c7827b..0bcf6d9c 100644 --- a/tslint.json +++ b/tslint.json @@ -1,20 +1,25 @@ { "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], + "extends": "tslint:recommended", "jsRules": {}, "rules": { + "await-promise": true, + "no-floating-promises": true, "only-arrow-functions": false, "max-classes-per-file": false, "interface-name": false, - "no-console": [false], + "no-console": [ + false + ], "arrow-parens": false, "member-ordering": false, "ordered-imports": false, "object-literal-sort-keys": false, "no-empty": false, - "quotemark": [true, "single"], + "quotemark": [ + true, + "single" + ], "trailing-comma": false, "max-line-length": false }, diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..c8d47819 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4261 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" + integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helpers" "^7.4.4" + "@babel/parser" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.0.0", "@babel/generator@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" + integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== + dependencies: + "@babel/types" "^7.4.4" + jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helpers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" + integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== + dependencies: + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" + integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" + integrity sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" + integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@jest/console@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" + integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg== + dependencies: + "@jest/source-map" "^24.3.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.7.1.tgz#6707f50db238d0c5988860680e2e414df0032024" + integrity sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA== + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.7.0" + jest-config "^24.7.1" + jest-haste-map "^24.7.1" + jest-message-util "^24.7.1" + jest-regex-util "^24.3.0" + jest-resolve-dependencies "^24.7.1" + jest-runner "^24.7.1" + jest-runtime "^24.7.1" + jest-snapshot "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + jest-watcher "^24.7.1" + micromatch "^3.1.10" + p-each-series "^1.0.0" + pirates "^4.0.1" + realpath-native "^1.1.0" + rimraf "^2.5.4" + strip-ansi "^5.0.0" + +"@jest/environment@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.7.1.tgz#9b9196bc737561f67ac07817d4c5ece772e33135" + integrity sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw== + dependencies: + "@jest/fake-timers" "^24.7.1" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + jest-mock "^24.7.0" + +"@jest/fake-timers@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.7.1.tgz#56e5d09bdec09ee81050eaff2794b26c71d19db2" + integrity sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA== + dependencies: + "@jest/types" "^24.7.0" + jest-message-util "^24.7.1" + jest-mock "^24.7.0" + +"@jest/reporters@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.7.1.tgz#38ac0b096cd691bbbe3051ddc25988d42e37773a" + integrity sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw== + dependencies: + "@jest/environment" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-api "^2.1.1" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-source-maps "^3.0.1" + jest-haste-map "^24.7.1" + jest-resolve "^24.7.1" + jest-runtime "^24.7.1" + jest-util "^24.7.1" + jest-worker "^24.6.0" + node-notifier "^5.2.1" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" + integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.7.1.tgz#19eacdb29a114300aed24db651e5d975f08b6bbe" + integrity sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg== + dependencies: + "@jest/console" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz#9c18e428e1ad945fa74f6233a9d35745ca0e63e0" + integrity sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA== + dependencies: + "@jest/test-result" "^24.7.1" + jest-haste-map "^24.7.1" + jest-runner "^24.7.1" + jest-runtime "^24.7.1" + +"@jest/transform@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.7.1.tgz#872318f125bcfab2de11f53b465ab1aa780789c2" + integrity sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.7.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.7.1" + jest-regex-util "^24.3.0" + jest-util "^24.7.1" + micromatch "^3.1.10" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.7.0": + version "24.7.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.7.0.tgz#c4ec8d1828cdf23234d9b4ee31f5482a3f04f48b" + integrity sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/yargs" "^12.0.9" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== + dependencies: + any-observable "^0.3.0" + +"@types/babel__core@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.1.tgz#ce9a9e5d92b7031421e1d0d74ae59f572ba48be6" + integrity sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" + integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" + integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/ip@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" + integrity sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/jest-diff@*": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" + integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== + +"@types/jest@^24.0.11": + version "24.0.11" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.11.tgz#1f099bea332c228ea6505a88159bfa86a5858340" + integrity sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ== + dependencies: + "@types/jest-diff" "*" + +"@types/lodash@^4.14.113": + version "4.14.123" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" + integrity sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q== + +"@types/node@*": + version "11.13.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.8.tgz#e5d71173c95533be9842b2c798978f095f912aab" + integrity sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg== + +"@types/node@^10.5.3": + version "10.14.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.6.tgz#9cbfcb62c50947217f4d88d4d274cc40c22625a9" + integrity sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg== + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": + version "12.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" + integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== + +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-globals@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" + integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-walk@^6.0.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" + integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== + +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.0.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + +ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== + dependencies: + default-require-extensions "^2.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + +async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-jest@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" + integrity sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg== + dependencies: + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.6.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-plugin-istanbul@^5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.3.tgz#202d20ffc96a821c68a3964412de75b9bdeb48c7" + integrity sha512-IFyehbvRRwdBlI1lDp+FaMsWNnEndEk7065IB8NhzBX+ZKLPwPodgk4I5Gobw/8SNUUzso2Dv3hbqRh88eiSCQ== + dependencies: + find-up "^3.0.0" + istanbul-lib-instrument "^3.2.0" + test-exclude "^5.2.2" + +babel-plugin-jest-hoist@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" + integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-preset-jest@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" + integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.6.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= + dependencies: + node-int64 "^0.4.0" + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +compare-versions@^3.2.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" + integrity sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" + integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.0" + parse-json "^4.0.0" + +coveralls@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.3.tgz#83b1c64aea1c6afa69beaf50b55ac1bc4d13e2b8" + integrity sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg== + dependencies: + growl "~> 1.10.0" + js-yaml "^3.11.0" + lcov-parse "^0.0.10" + log-driver "^1.2.7" + minimist "^1.2.0" + request "^2.86.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.6" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" + integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== + +cssstyle@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077" + integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow== + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= + dependencies: + strip-bom "^3.0.0" + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +diff-sequences@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" + integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== + +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.5.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.9.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" + integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + +execa@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" + integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.7.1.tgz#d91defbab4e627470a152feaf35b3c31aa1c7c14" + integrity sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw== + dependencies: + "@jest/types" "^24.7.0" + ansi-styles "^3.2.0" + jest-get-type "^24.3.0" + jest-matcher-utils "^24.7.0" + jest-message-util "^24.7.1" + jest-regex-util "^24.3.0" + +expression-eval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/expression-eval/-/expression-eval-2.0.0.tgz#156bc71a700b0c7797f47d8a7167ce4fba5c060c" + integrity sha512-8cFzfco37CdZQd4DTyZ+ncxQtPUTE0dcxvbGXYc17Ji+3MQSBkT+11GdfC7eO2duvLNuWjN7Ejqb0kLX/u2bBw== + dependencies: + jsep "^0.3.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + dependencies: + bser "^2.0.0" + +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +fileset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.8.tgz#57ea5320f762cd4696e5e8e87120eccc8b11cacf" + integrity sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" + integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +"growl@~> 1.10.0": + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handlebars@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + integrity sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA== + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-api@^2.1.1: + version "2.1.5" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.5.tgz#697b95ec69856c278aacafc0f86ee7392338d5b5" + integrity sha512-meYk1BwDp59Pfse1TvPrkKYgVqAufbdBLEVoqvu/hLLKSaQ054ZTksbNepyc223tMnWdm6AdK2URIJJRqdP87g== + dependencies: + async "^2.6.1" + compare-versions "^3.2.1" + fileset "^2.0.3" + istanbul-lib-coverage "^2.0.4" + istanbul-lib-hook "^2.0.6" + istanbul-lib-instrument "^3.2.0" + istanbul-lib-report "^2.0.7" + istanbul-lib-source-maps "^3.0.5" + istanbul-reports "^2.2.3" + js-yaml "^3.13.0" + make-dir "^2.1.0" + minimatch "^3.0.4" + once "^1.4.0" + +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#927a354005d99dd43a24607bb8b33fd4e9aca1ad" + integrity sha512-LXTBICkMARVgo579kWDm8SqfB6nvSDKNqIOBEjmJRnL04JvoMHCYGWaMddQnseJYtkEuEvO/sIcOxPLk9gERug== + +istanbul-lib-hook@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.6.tgz#5baa6067860a38290aef038b389068b225b01b7d" + integrity sha512-829DKONApZ7UCiPXcOYWSgkFXa4+vNYoNOt3F+4uDJLKL1OotAoVwvThoEj1i8jmOj7odbYcR3rnaHu+QroaXg== + dependencies: + append-transform "^1.0.0" + +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.2.0.tgz#c549208da8a793f6622257a2da83e0ea96ae6a93" + integrity sha512-06IM3xShbNW4NgZv5AP4QH0oHqf1/ivFo8eFys0ZjPXHGldHJQWb3riYOKXqmOqfxXBfxu4B+g/iuhOPZH0RJg== + dependencies: + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + istanbul-lib-coverage "^2.0.4" + semver "^6.0.0" + +istanbul-lib-report@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.7.tgz#370d80d433c4dbc7f58de63618f49599c74bd954" + integrity sha512-wLH6beJBFbRBLiTlMOBxmb85cnVM1Vyl36N48e4e/aTKSM3WbOx7zbVIH1SQ537fhhsPbX0/C5JB4qsmyRXXyA== + dependencies: + istanbul-lib-coverage "^2.0.4" + make-dir "^2.1.0" + supports-color "^6.0.0" + +istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.5.tgz#1d9ee9d94d2633f15611ee7aae28f9cac6d1aeb9" + integrity sha512-eDhZ7r6r1d1zQPVZehLc3D0K14vRba/eBYkz3rw16DLOrrTzve9RmnkcwrrkWVgO1FL3EK5knujVe5S8QHE9xw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.4" + make-dir "^2.1.0" + rimraf "^2.6.2" + source-map "^0.6.1" + +istanbul-reports@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.3.tgz#14e0d00ecbfa9387757999cf36599b88e9f2176e" + integrity sha512-T6EbPuc8Cb620LWAYyZ4D8SSn06dY9i1+IgUX2lTH8gbwflMc9Obd33zHTyNX653ybjpamAHS9toKS3E6cGhTw== + dependencies: + handlebars "^4.1.0" + +jest-changed-files@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.7.0.tgz#39d723a11b16ed7b373ac83adc76a69464b0c4fa" + integrity sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw== + dependencies: + "@jest/types" "^24.7.0" + execa "^1.0.0" + throat "^4.0.0" + +jest-cli@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.7.1.tgz#6093a539073b6f4953145abeeb9709cd621044f1" + integrity sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ== + dependencies: + "@jest/core" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + chalk "^2.0.1" + exit "^0.1.2" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^12.0.2" + +jest-config@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.7.1.tgz#6c1dd4db82a89710a3cf66bdba97827c9a1cf052" + integrity sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.7.1" + "@jest/types" "^24.7.0" + babel-jest "^24.7.1" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.7.1" + jest-environment-node "^24.7.1" + jest-get-type "^24.3.0" + jest-jasmine2 "^24.7.1" + jest-regex-util "^24.3.0" + jest-resolve "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + micromatch "^3.1.10" + pretty-format "^24.7.0" + realpath-native "^1.1.0" + +jest-diff@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.7.0.tgz#5d862899be46249754806f66e5729c07fcb3580f" + integrity sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.3.0" + jest-get-type "^24.3.0" + pretty-format "^24.7.0" + +jest-docblock@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" + integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== + dependencies: + detect-newline "^2.1.0" + +jest-each@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.7.1.tgz#fcc7dda4147c28430ad9fb6dc7211cd17ab54e74" + integrity sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA== + dependencies: + "@jest/types" "^24.7.0" + chalk "^2.0.1" + jest-get-type "^24.3.0" + jest-util "^24.7.1" + pretty-format "^24.7.0" + +jest-environment-jsdom@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz#a40e004b4458ebeb8a98082df135fd501b9fbbd6" + integrity sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg== + dependencies: + "@jest/environment" "^24.7.1" + "@jest/fake-timers" "^24.7.1" + "@jest/types" "^24.7.0" + jest-mock "^24.7.0" + jest-util "^24.7.1" + jsdom "^11.5.1" + +jest-environment-node@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.7.1.tgz#fa2c047a31522a48038d26ee4f7c8fd9c1ecfe12" + integrity sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA== + dependencies: + "@jest/environment" "^24.7.1" + "@jest/fake-timers" "^24.7.1" + "@jest/types" "^24.7.0" + jest-mock "^24.7.0" + jest-util "^24.7.1" + +jest-get-type@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== + +jest-get-type@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" + integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow== + +jest-haste-map@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.7.1.tgz#772e215cd84080d4bbcb759cfb668ad649a21471" + integrity sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw== + dependencies: + "@jest/types" "^24.7.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.4.0" + jest-util "^24.7.1" + jest-worker "^24.6.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz#01398686dabe46553716303993f3be62e5d9d818" + integrity sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.7.1" + is-generator-fn "^2.0.0" + jest-each "^24.7.1" + jest-matcher-utils "^24.7.0" + jest-message-util "^24.7.1" + jest-runtime "^24.7.1" + jest-snapshot "^24.7.1" + jest-util "^24.7.1" + pretty-format "^24.7.0" + throat "^4.0.0" + +jest-leak-detector@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz#323ff93ed69be12e898f5b040952f08a94288ff9" + integrity sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ== + dependencies: + pretty-format "^24.7.0" + +jest-matcher-utils@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz#bbee1ff37bc8b2e4afcaabc91617c1526af4bcd4" + integrity sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg== + dependencies: + chalk "^2.0.1" + jest-diff "^24.7.0" + jest-get-type "^24.3.0" + pretty-format "^24.7.0" + +jest-message-util@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.7.1.tgz#f1dc3a6c195647096a99d0f1dadbc447ae547018" + integrity sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.7.0.tgz#e49ce7262c12d7f5897b0d8af77f6db8e538023b" + integrity sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng== + dependencies: + "@jest/types" "^24.7.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" + integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== + +jest-resolve-dependencies@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz#cf93bbef26999488a96a2b2012f9fe7375aa378f" + integrity sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg== + dependencies: + "@jest/types" "^24.7.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.7.1" + +jest-resolve@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.7.1.tgz#e4150198299298380a75a9fd55043fa3b9b17fde" + integrity sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw== + dependencies: + "@jest/types" "^24.7.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.7.1.tgz#41c8a02a06aa23ea82d8bffd69d7fa98d32f85bf" + integrity sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + chalk "^2.4.2" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-config "^24.7.1" + jest-docblock "^24.3.0" + jest-haste-map "^24.7.1" + jest-jasmine2 "^24.7.1" + jest-leak-detector "^24.7.0" + jest-message-util "^24.7.1" + jest-resolve "^24.7.1" + jest-runtime "^24.7.1" + jest-util "^24.7.1" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.7.1.tgz#2ffd70b22dd03a5988c0ab9465c85cdf5d25c597" + integrity sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.7.1" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/yargs" "^12.0.2" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.7.1" + jest-haste-map "^24.7.1" + jest-message-util "^24.7.1" + jest-mock "^24.7.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.7.1" + jest-snapshot "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^12.0.2" + +jest-serializer@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" + integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== + +jest-snapshot@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.7.1.tgz#bd5a35f74aedff070975e9e9c90024f082099568" + integrity sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.7.0" + chalk "^2.0.1" + expect "^24.7.1" + jest-diff "^24.7.0" + jest-matcher-utils "^24.7.0" + jest-message-util "^24.7.1" + jest-resolve "^24.7.1" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^24.7.0" + semver "^5.5.0" + +jest-util@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.7.1.tgz#b4043df57b32a23be27c75a2763d8faf242038ff" + integrity sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/fake-timers" "^24.7.1" + "@jest/source-map" "^24.3.0" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^23.5.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" + integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.6.0" + +jest-validate@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.7.0.tgz#70007076f338528ee1b1c8a8258b1b0bb982508d" + integrity sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA== + dependencies: + "@jest/types" "^24.7.0" + camelcase "^5.0.0" + chalk "^2.0.1" + jest-get-type "^24.3.0" + leven "^2.1.0" + pretty-format "^24.7.0" + +jest-watcher@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.7.1.tgz#e161363d7f3f4e1ef3d389b7b3a0aad247b673f5" + integrity sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw== + dependencies: + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/yargs" "^12.0.9" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.7.1" + string-length "^2.0.0" + +jest-worker@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" + integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== + dependencies: + merge-stream "^1.0.1" + supports-color "^6.1.0" + +jest@^24.3.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.7.1.tgz#0d94331cf510c75893ee32f87d7321d5bf8f2501" + integrity sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA== + dependencies: + import-local "^2.0.0" + jest-cli "^24.7.1" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.11.0, js-yaml@^3.13.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsep@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/jsep/-/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" + integrity sha512-ovGD9wE+wvudIIYxZGrRcZCxNyZ3Cl1N7Bzyp7/j4d/tA0BaUwcVM9bu0oZaSrefMiNwv6TwZ9X15gvZosteCQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@2.x, json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +kleur@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +lcov-parse@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lint-staged@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.3.0.tgz#90ff33e5ca61ed3dbac35b6f6502dbefdc0db58d" + integrity sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw== + dependencies: + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.0.2" + debug "^3.1.0" + dedent "^0.7.0" + execa "^0.9.0" + find-parent-dir "^0.3.0" + is-glob "^4.0.0" + is-windows "^1.0.2" + jest-validate "^23.5.0" + listr "^0.14.1" + lodash "^4.17.5" + log-symbols "^2.2.0" + micromatch "^3.1.8" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.1" + string-argv "^0.0.2" + stringify-object "^3.2.2" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr@^0.14.1: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@1.x: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +nan@^2.12.1: + version "2.13.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" + integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388" + integrity sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg== + dependencies: + debug "^4.1.0" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^5.2.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" + integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ== + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.0.7: + version "2.1.3" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.3.tgz#25f3a5cec26c654f7376df6659cdf84b99df9558" + integrity sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +please-upgrade-node@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" + integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== + dependencies: + semver-compare "^1.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-format@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +pretty-format@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.7.0.tgz#d23106bc2edcd776079c2daa5da02bcb12ed0c10" + integrity sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA== + dependencies: + "@jest/types" "^24.7.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +prompts@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" + integrity sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA== + dependencies: + kleur "^3.0.2" + sisteransi "^1.0.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24, psl@^1.1.28: + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^16.8.4: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== + dependencies: + lodash "^4.17.11" + +request-promise-native@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + dependencies: + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.86.0, request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: + version "1.10.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" + integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" + integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== + +rxjs@^6.3.3: + version "6.5.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" + integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" + integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sisteransi@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" + integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +staged-git-files@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" + integrity sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +string-argv@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.0.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= + +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +test-exclude@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.2.tgz#7322f8ab037b0b93ad2aab35fe9068baf997a4c4" + integrity sha512-N2pvaLpT8guUpb5Fe1GJlmvmzH3x+DAKmmyEQmFP792QcLYoGE1syxztSvPD1V8yPe6VrcCt6YGQVjSRjCASsA== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^2.3.3, tough-cookie@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +ts-jest@^24.0.0: + version "24.0.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" + integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + +tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +tslint@^5.11.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.16.0.tgz#ae61f9c5a98d295b9a4f4553b1b1e831c1984d67" + integrity sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.13.0" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typescript@^3.4.5: + version "3.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" + integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw== + +uglify-js@^3.1.4: + version "3.5.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.9.tgz#372fbf95939555b1f460b1777d33a67d4a994ac9" + integrity sha512-WpT0RqsDtAWPNJK955DEnb6xjymR8Fn0OlK4TT4pS0ASYsVPqr5ELhgwOwLCP5J5vHeJ4xmMmz3DEgdqC10JeQ== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + dependencies: + browser-process-hrtime "^0.1.2" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.10, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +"y18n@^3.2.1 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@10.x: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^12.0.2: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" From 08538f4342bc641a0643a2909e02c8b65a50ccf9 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 29 Apr 2019 11:06:28 +0800 Subject: [PATCH 258/497] Make all function to async function in rolemanager interface --- src/casbin.ts | 100 --------------------------------- src/coreEnforcer.ts | 6 +- src/enforcer.ts | 62 +++++++++++++++++++- src/index.ts | 1 - src/model/assertion.ts | 2 +- src/model/model.ts | 19 +++++++ src/rbac/defaultRoleManager.ts | 4 +- src/rbac/roleManager.ts | 4 +- 8 files changed, 86 insertions(+), 112 deletions(-) delete mode 100644 src/casbin.ts diff --git a/src/casbin.ts b/src/casbin.ts deleted file mode 100644 index b6820481..00000000 --- a/src/casbin.ts +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2019 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import { Enforcer } from './enforcer'; -import { getLogger } from './log'; -import { Model } from './model'; - -/** - * newModel creates a model. - */ -function newModel(...text: string[]): Model { - const m = new Model(); - - if (text.length === 2) { - if (text[0] !== '') { - m.loadModel(text[0]); - } - } else if (text.length === 1) { - m.loadModelFromText(text[0]); - } else if (text.length !== 0) { - throw new Error('Invalid parameters for model.'); - } - - return m; -} - -/** - * newEnforcer creates an enforcer via file or DB. - * - * File: - * ```js - * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); - * ``` - * - * MySQL DB: - * ```js - * const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); - * const e = new Enforcer('path/to/basic_model.conf', a); - * ``` - * - * @param params - */ - -async function newEnforcer(...params: any[]): Promise { - const e = new Enforcer(); - - let parsedParamLen = 0; - if (params.length >= 1) { - const enableLog = params[params.length - 1]; - if (typeof enableLog === 'boolean') { - getLogger().enableLog(enableLog); - parsedParamLen++; - } - } - - if (params.length - parsedParamLen === 2) { - if (typeof params[0] === 'string') { - if (typeof params[1] === 'string') { - await e.initWithFile(params[0].toString(), params[1].toString()); - } else { - await e.initWithAdapter(params[0].toString(), params[1]); - } - } else { - if (typeof params[1] === 'string') { - throw new Error('Invalid parameters for enforcer.'); - } else { - await e.initWithModelAndAdapter(params[0], params[1]); - } - } - } else if (params.length - parsedParamLen === 1) { - if (typeof params[0] === 'string') { - await e.initWithFile(params[0], ''); - } else { - // @ts-ignore - await e.initWithModelAndAdapter(params[0], null); - } - } else if (params.length === parsedParamLen) { - await e.initWithFile('', ''); - } else { - throw new Error('Invalid parameters for enforcer.'); - } - - return e; -} - -export { - newEnforcer, - newModel -}; diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 652c31d7..14be646a 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -16,11 +16,10 @@ import { compileAsync } from 'expression-eval'; import * as _ from 'lodash'; import { DefaultEffector, Effect, Effector } from './effect'; -import { FunctionMap, Model } from './model'; +import { FunctionMap, Model, newModel } from './model'; import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { generateGFunction } from './util'; -import { newModel } from './casbin'; import { getLogger, logPrint } from './log'; /** @@ -242,8 +241,7 @@ export class CoreEnforcer { * role inheritance relations. */ public async buildRoleLinks(): Promise { - // error intentionally ignored - this.rm.clear(); + await this.rm.clear(); await this.model.buildRoleLinks(this.rm); } diff --git a/src/enforcer.ts b/src/enforcer.ts index 75bde574..ee706654 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -13,9 +13,9 @@ // limitations under the License. import { ManagementEnforcer } from './managementEnforcer'; -import { FunctionMap, Model } from './model'; +import { FunctionMap, Model, newModel } from './model'; import { Adapter, FileAdapter } from './persist'; -import { newModel } from './casbin'; +import { getLogger } from './log'; /** * Enforcer = ManagementEnforcer + RBAC API. @@ -303,3 +303,61 @@ export class Enforcer extends ManagementEnforcer { return res; } } + +/** + * newEnforcer creates an enforcer via file or DB. + * + * File: + * ```js + * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); + * ``` + * + * MySQL DB: + * ```js + * const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); + * const e = new Enforcer('path/to/basic_model.conf', a); + * ``` + * + * @param params + */ +export async function newEnforcer(...params: any[]): Promise { + const e = new Enforcer(); + + let parsedParamLen = 0; + if (params.length >= 1) { + const enableLog = params[params.length - 1]; + if (typeof enableLog === 'boolean') { + getLogger().enableLog(enableLog); + parsedParamLen++; + } + } + + if (params.length - parsedParamLen === 2) { + if (typeof params[0] === 'string') { + if (typeof params[1] === 'string') { + await e.initWithFile(params[0].toString(), params[1].toString()); + } else { + await e.initWithAdapter(params[0].toString(), params[1]); + } + } else { + if (typeof params[1] === 'string') { + throw new Error('Invalid parameters for enforcer.'); + } else { + await e.initWithModelAndAdapter(params[0], params[1]); + } + } + } else if (params.length - parsedParamLen === 1) { + if (typeof params[0] === 'string') { + await e.initWithFile(params[0], ''); + } else { + // @ts-ignore + await e.initWithModelAndAdapter(params[0], null); + } + } else if (params.length === parsedParamLen) { + await e.initWithFile('', ''); + } else { + throw new Error('Invalid parameters for enforcer.'); + } + + return e; +} diff --git a/src/index.ts b/src/index.ts index 83079b79..b97fa067 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,6 +20,5 @@ export * from './effect'; export * from './model'; export * from './persist'; export * from './rbac'; -export * from './casbin'; export * from './log'; export { Util }; diff --git a/src/model/assertion.ts b/src/model/assertion.ts index 57debc1d..e5f1778d 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -63,6 +63,6 @@ export class Assertion { } logPrint(`Role links for: ${this.key}`); - this.rm.printRoles(); + await this.rm.printRoles(); } } diff --git a/src/model/model.ts b/src/model/model.ts index 6ab92350..4c02738b 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -278,3 +278,22 @@ export class Model { }); } } + +/** + * newModel creates a model. + */ +export function newModel(...text: string[]): Model { + const m = new Model(); + + if (text.length === 2) { + if (text[0] !== '') { + m.loadModel(text[0]); + } + } else if (text.length === 1) { + m.loadModelFromText(text[0]); + } else if (text.length !== 0) { + throw new Error('Invalid parameters for model.'); + } + + return m; +} diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 08a49b65..37ab8e01 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -52,7 +52,7 @@ export class DefaultRoleManager implements RoleManager { /** * clear clears all stored data and resets the role manager to the initial state. */ - public clear(): void { + public async clear() { this.allRoles = new Map(); } @@ -153,7 +153,7 @@ export class DefaultRoleManager implements RoleManager { /** * printRoles prints all the roles to log. */ - public printRoles(): void { + public async printRoles() { [...this.allRoles.values()].map(n => { logPrint(n.toString()); }); diff --git a/src/rbac/roleManager.ts b/src/rbac/roleManager.ts index 25aaa788..8deaa289 100644 --- a/src/rbac/roleManager.ts +++ b/src/rbac/roleManager.ts @@ -15,7 +15,7 @@ // RoleManager provides interface to define the operations for managing roles. export interface RoleManager { // Clear clears all stored data and resets the role manager to the initial state. - clear(): void; + clear(): Promise; // AddLink adds the inheritance link between two roles. role: name1 and role: name2. // domain is a prefix to the roles (can be used for other purposes). addLink(name1: string, name2: string, ...domain: string[]): Promise; @@ -32,5 +32,5 @@ export interface RoleManager { // domain is a prefix to the users (can be used for other purposes). getUsers(name: string, ...domain: string[]): Promise; // PrintRoles prints all the roles to log. - printRoles(): void; + printRoles(): Promise; } From 13c6353bdd82777bbfafdab090dc374159628d7f Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 29 Apr 2019 19:53:06 +0800 Subject: [PATCH 259/497] v3.0.0-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 295de1d2..76d06390 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "2.0.3", + "version": "3.0.0-beta.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From d9e4878e740dbd2abe2d2982c4b02cc3a3d1c099 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 21 May 2019 19:49:32 +0800 Subject: [PATCH 260/497] Improve base config --- .prettierrc | 3 +- .travis.yml | 4 +- jest.config.js | 7 + package.json | 35 ++-- tsconfig.release.json | 2 +- yarn.lock | 379 ++++++++++++++++++++++++++++-------------- 6 files changed, 282 insertions(+), 148 deletions(-) create mode 100644 jest.config.js diff --git a/.prettierrc b/.prettierrc index 937375d2..7de69380 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { "semi": true, - "singleQuote": true + "singleQuote": true, + "printWidth": 100 } diff --git a/.travis.yml b/.travis.yml index dd2a2b86..0c613b7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,9 @@ node_js: install: yarn install -script: echo "Running tests against $(node -v)..." +script: + - yarn run lint + - yarn run test jobs: include: diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..7e09a449 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + testEnvironment: 'node', + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest' + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'] +}; diff --git a/package.json b/package.json index 76d06390..7b0d615e 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,9 @@ "main": "lib/index.js", "typings": "lib/index.d.ts", "scripts": { - "precommit": "lint-staged", - "prepublishOnly": "yarn run lint && yarn run test && yarn build", + "prepack": "yarn run lint && yarn run test && yarn build", + "postpack": "rimraf lib", + "prettier": "prettier --write", "build": "rimraf lib && tsc -p tsconfig.release.json", "lint": "tslint -p . -c tslint.json", "test": "jest" @@ -17,9 +18,10 @@ "@types/lodash": "^4.14.113", "@types/node": "^10.5.3", "coveralls": "^3.0.2", - "husky": "^0.14.3", + "husky": "^2.3.0", "jest": "^24.3.1", - "lint-staged": "^7.2.0", + "lint-staged": "^8.1.7", + "prettier": "^1.17.1", "rimraf": "^2.6.2", "ts-jest": "^24.0.0", "tslint": "^5.11.0", @@ -45,27 +47,18 @@ "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, "lint-staged": { "*.{ts,js}": [ - "yarn lint", + "prettier --write", "git add" ] }, - "jest": { - "testURL": "http://localhost", - "transform": { - "^.+\\.(ts|tsx)$": "ts-jest" - }, - "testMatch": [ - "**/test/**/*.+(ts|tsx)" - ], - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "jsx", - "json", - "node" - ] + "publishConfig": { + "registry": "https://registry.npmjs.org" } } diff --git a/tsconfig.release.json b/tsconfig.release.json index bfb54dac..1311a3fe 100644 --- a/tsconfig.release.json +++ b/tsconfig.release.json @@ -5,5 +5,5 @@ "declarationDir": "lib", "outDir": "lib" }, - "include": ["src/**/*.ts"] + "include": ["src/**/*"] } diff --git a/yarn.lock b/yarn.lock index c8d47819..3f1b2cf7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -98,6 +98,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/runtime@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d" + integrity sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" @@ -362,6 +369,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.6.tgz#9cbfcb62c50947217f4d88d4d274cc40c22625a9" integrity sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg== +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -507,11 +519,28 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -774,11 +803,6 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -897,14 +921,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" - integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== +cosmiconfig@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" - js-yaml "^3.13.0" + js-yaml "^3.13.1" parse-json "^4.0.0" coveralls@^3.0.2: @@ -919,15 +943,6 @@ coveralls@^3.0.2: minimist "^1.2.0" request "^2.86.0" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -986,7 +1001,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -1054,6 +1069,18 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1139,7 +1166,7 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -1181,19 +1208,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -1355,6 +1369,18 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a" + integrity sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q== + dependencies: + locate-path "^5.0.0" + +fn-name@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" + integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1406,6 +1432,15 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +g-status@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" + integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== + dependencies: + arrify "^1.0.1" + matcher "^1.0.0" + simple-git "^1.85.0" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1430,10 +1465,10 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== get-stream@^4.0.0: version "4.1.0" @@ -1471,6 +1506,17 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" @@ -1591,14 +1637,21 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -husky@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" - integrity sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA== +husky@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/husky/-/husky-2.3.0.tgz#8b78ed24d763042df7fd899991985d65a976dd13" + integrity sha512-A/ZQSEILoq+mQM3yC3RIBSaw1bYXdkKnyyKVSUiJl+iBjVZc5LQEXdGY1ZjrDxC4IzfRPiJ0IqzEQGCN5TQa/A== dependencies: - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" + cosmiconfig "^5.2.0" + execa "^1.0.0" + find-up "^3.0.0" + get-stdin "^7.0.0" + is-ci "^2.0.0" + pkg-dir "^4.1.0" + please-upgrade-node "^3.1.1" + read-pkg "^5.1.1" + run-node "^1.0.0" + slash "^3.0.0" iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" @@ -1704,13 +1757,6 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -1820,6 +1866,25 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2071,11 +2136,6 @@ jest-environment-node@^24.7.1: jest-mock "^24.7.0" jest-util "^24.7.1" -jest-get-type@^22.1.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== - jest-get-type@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" @@ -2285,16 +2345,6 @@ jest-util@^24.7.1: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^23.5.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - jest-validate@^24.7.0: version "24.7.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.7.0.tgz#70007076f338528ee1b1c8a8258b1b0bb982508d" @@ -2341,7 +2391,7 @@ jest@^24.3.1: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.11.0, js-yaml@^3.13.0: +js-yaml@^3.11.0, js-yaml@^3.13.0, js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -2492,23 +2542,25 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lint-staged@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.3.0.tgz#90ff33e5ca61ed3dbac35b6f6502dbefdc0db58d" - integrity sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw== +lint-staged@^8.1.7: + version "8.1.7" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.7.tgz#a8988bc83bdffa97d04adb09dbc0b1f3a58fa6fc" + integrity sha512-egT0goFhIFoOGk6rasPngTFh2qDqxZddM0PwI58oi66RxCDcn5uDwxmiasWIF0qGnchHSYVJ8HPRD5LrFo7TKA== dependencies: chalk "^2.3.1" commander "^2.14.1" - cosmiconfig "^5.0.2" + cosmiconfig "^5.2.0" debug "^3.1.0" dedent "^0.7.0" - execa "^0.9.0" + del "^3.0.0" + execa "^1.0.0" find-parent-dir "^0.3.0" + g-status "^2.0.2" is-glob "^4.0.0" is-windows "^1.0.2" - jest-validate "^23.5.0" - listr "^0.14.1" - lodash "^4.17.5" + listr "^0.14.2" + listr-update-renderer "^0.5.0" + lodash "^4.17.11" log-symbols "^2.2.0" micromatch "^3.1.8" npm-which "^3.0.1" @@ -2516,9 +2568,10 @@ lint-staged@^7.2.0: path-is-inside "^1.0.2" pify "^3.0.0" please-upgrade-node "^3.0.2" - staged-git-files "1.1.1" + staged-git-files "1.1.2" string-argv "^0.0.2" stringify-object "^3.2.2" + yup "^0.27.0" listr-silent-renderer@^1.1.1: version "1.1.1" @@ -2549,7 +2602,7 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr@^0.14.1: +listr@^0.14.2: version "0.14.3" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== @@ -2582,12 +2635,19 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5: +lodash@^4.17.10, lodash@^4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -2627,14 +2687,6 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -2674,6 +2726,13 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +matcher@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" + integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== + dependencies: + escape-string-regexp "^1.0.4" + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -2884,7 +2943,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -2894,11 +2953,6 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -2967,7 +3021,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -3091,7 +3145,7 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== -p-limit@^2.0.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== @@ -3105,6 +3159,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -3153,7 +3214,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -3180,6 +3241,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -3190,6 +3256,18 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" @@ -3204,7 +3282,14 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -please-upgrade-node@^3.0.2: +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== @@ -3226,13 +3311,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" +prettier@^1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.1.tgz#ed64b4e93e370cb8a25b9ef7fef3e4fd1c0995db" + integrity sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg== pretty-format@^24.7.0: version "24.7.0" @@ -3257,10 +3339,10 @@ prompts@^2.0.1: kleur "^3.0.2" sisteransi "^1.0.0" -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= +property-expr@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" + integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== psl@^1.1.24, psl@^1.1.28: version "1.1.31" @@ -3322,6 +3404,16 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +read-pkg@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" + integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^4.0.0" + type-fest "^0.4.1" + readable-stream@^2.0.1, readable-stream@^2.0.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -3342,6 +3434,11 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -3464,7 +3561,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -3476,6 +3573,11 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== +run-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" + integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== + rxjs@^6.3.3: version "6.5.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" @@ -3582,6 +3684,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +simple-git@^1.85.0: + version "1.113.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.113.0.tgz#668989728a1e9cf4ec6c72b69ea2eecc93489bea" + integrity sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g== + dependencies: + debug "^4.0.1" + sisteransi@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" @@ -3592,6 +3701,11 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" @@ -3719,10 +3833,10 @@ stack-utils@^1.0.1: resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== -staged-git-files@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" - integrity sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A== +staged-git-files@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" + integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== static-extend@^0.1.1: version "0.1.2" @@ -3814,11 +3928,6 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -3853,6 +3962,11 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= +synchronous-promise@^2.0.6: + version "2.0.8" + resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.8.tgz#01fd026fffdbf2d3d39ec06ee1a7c971578136f7" + integrity sha512-xYavZtFC1vKgJu0AOSYdrLeikNCsNwmUeZaV1XF9cMqEhBVVxLq6rEbYzOGrF1MV2MNPkhsJqqiXuQ4a76CEUg== + tar@^4: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" @@ -3916,6 +4030,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= + tough-cookie@^2.3.3, tough-cookie@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -4009,6 +4128,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + typescript@^3.4.5: version "3.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" @@ -4217,11 +4341,6 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - yallist@^3.0.0, yallist@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" @@ -4259,3 +4378,15 @@ yargs@^12.0.2: which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" + +yup@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" + integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== + dependencies: + "@babel/runtime" "^7.0.0" + fn-name "~2.0.1" + lodash "^4.17.11" + property-expr "^1.5.0" + synchronous-promise "^2.0.6" + toposort "^2.0.2" From bdfa864af2d3699009ecab0e774bc8c19dd1b535 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 24 May 2019 21:13:54 +0800 Subject: [PATCH 261/497] Create FUNDING.yml --- .github/FUNDING.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..96603a39 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,8 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: casbin +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +custom: # Replace with a single custom sponsorship URL From c113f979e3aed27198113af3bf50bc1c34451439 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 5 Jun 2019 13:30:59 +0800 Subject: [PATCH 262/497] Format code and remove ts-ignore --- .prettierrc | 2 +- package.json | 2 +- src/coreEnforcer.ts | 216 +++++++++++++------------- src/effect/defaultEffector.ts | 8 +- src/enforcer.ts | 21 ++- src/log/logUtil.ts | 7 +- src/model/assertion.ts | 4 +- src/model/model.ts | 18 +-- src/persist/adapter.ts | 3 +- src/persist/defaultFilteredAdapter.ts | 6 +- src/rbac/defaultRoleManager.ts | 4 +- src/util/builtinOperators.ts | 17 +- src/util/util.ts | 2 +- test/enforcer.test.ts | 12 +- test/managementAPI.test.ts | 24 +-- test/rbacAPI.test.ts | 8 +- test/util.test.ts | 6 +- 17 files changed, 165 insertions(+), 195 deletions(-) diff --git a/.prettierrc b/.prettierrc index 7de69380..59f723ce 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { "semi": true, "singleQuote": true, - "printWidth": 100 + "printWidth": 140 } diff --git a/package.json b/package.json index 7b0d615e..5347cf2c 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "scripts": { "prepack": "yarn run lint && yarn run test && yarn build", "postpack": "rimraf lib", - "prettier": "prettier --write", + "prettier": "prettier --write **/*.{ts,js}", "build": "rimraf lib && tsc -p tsconfig.release.json", "lint": "tslint -p . -c tslint.json", "test": "jest" diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 14be646a..03dbb014 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -254,138 +254,136 @@ export class CoreEnforcer { * @return whether to allow the request. */ public async enforce(...rvals: any[]): Promise { - if (!this.enabled) { - return true; - } + if (!this.enabled) { + return true; + } + + const functions: { [key: string]: any } = {}; + this.fm.getFunctions().forEach((value: any, key: string) => { + functions[key] = value; + }); + + const astMap = this.model.model.get('g'); - const functions: { [key: string]: any } = {}; - this.fm.getFunctions().forEach((value: any, key: string) => { - functions[key] = value; + if (astMap) { + astMap.forEach((value, key) => { + const rm = value.rm; + functions[key] = generateGFunction(rm); }); + } - const astMap = this.model.model.get('g'); - if (astMap) { - astMap.forEach((value, key) => { - const rm = value.rm; - functions[key] = generateGFunction(rm); - }); - } + const expString = this.model.model.get('m')!.get('m')!.value; - // @ts-ignore - const expString = this.model.model.get('m').get('m').value; - if (!expString) { - throw new Error('model is undefined'); - } + if (!expString) { + throw new Error('model is undefined'); + } - const expression = compileAsync(expString); - - let policyEffects: Effect[]; - let matcherResults: number[]; - // @ts-ignore - const policyLen = this.model.model.get('p').get('p').policy.length; - if (policyLen !== 0) { - policyEffects = new Array(policyLen); - matcherResults = new Array(policyLen); - - for (let i = 0; i < policyLen; i++) { - // @ts-ignore - const pvals = this.model.model.get('p').get('p').policy[i]; - - // logPrint('Policy Rule: ', pvals); - - const parameters: { [key: string]: any } = {}; - // @ts-ignore - this.model.model.get('r').get('r').tokens.forEach((token, j) => { - parameters[token] = rvals[j]; - }); - // @ts-ignore - this.model.model.get('p').get('p').tokens.forEach((token, j) => { - parameters[token] = pvals[j]; - }); - - const result = await expression({ ...parameters, ...functions }); - - switch (typeof result) { - case 'boolean': - if (!result) { - policyEffects[i] = Effect.Indeterminate; - continue; - } - break; - case 'number': - if (result === 0) { - policyEffects[i] = Effect.Indeterminate; - continue; - } else { - matcherResults[i] = result; - } - break; - default: - throw new Error('matcher result should be boolean or number'); - } + const expression = compileAsync(expString); - if (_.has(parameters, 'p_eft')) { - const eft = _.get(parameters, 'p_eft'); - if (eft === 'allow') { - policyEffects[i] = Effect.Allow; - } else if (eft === 'deny') { - policyEffects[i] = Effect.Deny; - } else { - policyEffects[i] = Effect.Indeterminate; - } - } else { - policyEffects[i] = Effect.Allow; - } + let policyEffects: Effect[]; + let matcherResults: number[]; - // @ts-ignore - if (this.model.model.get('e').get('e').value === 'priority(p_eft) || deny') { - break; - } - } - } else { - policyEffects = new Array(1); - matcherResults = new Array(1); + const policyLen = this.model.model.get('p')!.get('p')!.policy.length; + + if (policyLen !== 0) { + policyEffects = new Array(policyLen); + matcherResults = new Array(policyLen); + + for (let i = 0; i < policyLen; i++) { + const pvals = this.model.model.get('p')!.get('p')!.policy[i]; const parameters: { [key: string]: any } = {}; - // @ts-ignore - this.model.model.get('r').get('r').tokens.forEach((token, j) => { + + const { tokens: rTokens } = this.model.model.get('r')!.get('r')!; + rTokens.forEach((token, j) => { parameters[token] = rvals[j]; }); - // @ts-ignore - this.model.model.get('p').get('p').tokens.forEach((token) => { - parameters[token] = ''; + + const { tokens: gTokens } = this.model.model.get('p')!.get('p')!; + gTokens.forEach((token, j) => { + parameters[token] = pvals[j]; }); const result = await expression({ ...parameters, ...functions }); - // logPrint(`Result: ${result}`); - if (result) { - policyEffects[0] = Effect.Allow; + switch (typeof result) { + case 'boolean': + if (!result) { + policyEffects[i] = Effect.Indeterminate; + continue; + } + break; + case 'number': + if (result === 0) { + policyEffects[i] = Effect.Indeterminate; + continue; + } else { + matcherResults[i] = result; + } + break; + default: + throw new Error('matcher result should be boolean or number'); + } + + if (_.has(parameters, 'p_eft')) { + const eft = _.get(parameters, 'p_eft'); + if (eft === 'allow') { + policyEffects[i] = Effect.Allow; + } else if (eft === 'deny') { + policyEffects[i] = Effect.Deny; + } else { + policyEffects[i] = Effect.Indeterminate; + } } else { - policyEffects[0] = Effect.Indeterminate; + policyEffects[i] = Effect.Allow; + } + + if (this.model.model.get('e')!.get('e')!.value === 'priority(p_eft) || deny') { + break; } } + } else { + policyEffects = new Array(1); + matcherResults = new Array(1); - // logPrint(`Rule Results: ${policyEffects}`); + const parameters: { [key: string]: any } = {}; - // @ts-ignore - const res = this.eft.mergeEffects(this.model.model.get('e').get('e').value, policyEffects, matcherResults); + const { tokens: rTokens } = this.model.model.get('r')!.get('r')!; + rTokens.forEach((token, j) => { + parameters[token] = rvals[j]; + }); - // only generate the request --> result string if the message - // is going to be logged. - if (getLogger().isEnable()) { - let reqStr = 'Request: '; - for (let i = 0; i < rvals.length; i++) { - if (i !== rvals.length - 1) { - reqStr += `${rvals[i]}, `; - } else { - reqStr += rvals[i]; - } + const { tokens: pTokens } = this.model.model.get('p')!.get('p')!; + pTokens.forEach(token => { + parameters[token] = ''; + }); + + const result = await expression({ ...parameters, ...functions }); + + if (result) { + policyEffects[0] = Effect.Allow; + } else { + policyEffects[0] = Effect.Indeterminate; + } + } + + const res = this.eft.mergeEffects(this.model.model.get('e')!.get('e')!.value, policyEffects, matcherResults); + + // only generate the request --> result string if the message + // is going to be logged. + if (getLogger().isEnable()) { + let reqStr = 'Request: '; + for (let i = 0; i < rvals.length; i++) { + if (i !== rvals.length - 1) { + reqStr += `${rvals[i]}, `; + } else { + reqStr += rvals[i]; } - reqStr += ` ---> ${res}`; - logPrint(reqStr); } + reqStr += ` ---> ${res}`; + logPrint(reqStr); + } - return res; + return res; } } diff --git a/src/effect/defaultEffector.ts b/src/effect/defaultEffector.ts index 08f58638..f6cd26fb 100644 --- a/src/effect/defaultEffector.ts +++ b/src/effect/defaultEffector.ts @@ -32,9 +32,7 @@ export class DefaultEffector implements Effector { result = effects.some(n => n === Effect.Allow); } else if (expr === '!some(where (p_eft == deny))') { result = !effects.some(n => n === Effect.Deny); - } else if ( - expr === 'some(where (p_eft == allow)) && !some(where (p_eft == deny))' - ) { + } else if (expr === 'some(where (p_eft == allow)) && !some(where (p_eft == deny))') { result = false; for (const eft of effects) { if (eft === Effect.Allow) { @@ -45,9 +43,7 @@ export class DefaultEffector implements Effector { } } } else if (expr === 'priority(p_eft) || deny') { - result = effects.some( - n => n !== Effect.Indeterminate && n === Effect.Allow - ); + result = effects.some(n => n !== Effect.Indeterminate && n === Effect.Allow); } else { throw new Error('unsupported effect'); } diff --git a/src/enforcer.ts b/src/enforcer.ts index ee706654..68b52968 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -48,7 +48,7 @@ export class Enforcer extends ManagementEnforcer { * @param m model instance * @param adapter current adapter instance */ - public async initWithModelAndAdapter(m: Model, adapter: Adapter): Promise { + public async initWithModelAndAdapter(m: Model, adapter?: Adapter): Promise { if (adapter) { this.adapter = adapter; } @@ -73,8 +73,7 @@ export class Enforcer extends ManagementEnforcer { * @return the roles that the user has. */ public async getRolesForUser(name: string, domain?: string): Promise { - // @ts-ignore - const rm = this.model.model.get('g').get('g').rm; + const rm = this.model.model.get('g')!.get('g')!.rm; if (domain == null) { return await rm.getRoles(name); } else { @@ -90,8 +89,7 @@ export class Enforcer extends ManagementEnforcer { * @return the users that has the role. */ public async getUsersForRole(name: string, domain?: string): Promise { - // @ts-ignore - const rm = this.model.model.get('g').get('g').rm; + const rm = this.model.model.get('g')!.get('g')!.rm; if (domain == null) { return await rm.getUsers(name); } else { @@ -277,9 +275,11 @@ export class Enforcer extends ManagementEnforcer { const res: string[] = []; const roles = await this.rm.getRoles(name, ...domain); res.push(...roles); - await Promise.all(roles.map(async n => { - res.push(...await this.getImplicitRolesForUser(n, ...domain)); - })); + await Promise.all( + roles.map(async n => { + res.push(...(await this.getImplicitRolesForUser(n, ...domain))); + }) + ); return res; } @@ -295,7 +295,7 @@ export class Enforcer extends ManagementEnforcer { * But getImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]]. */ public async getImplicitPermissionsForUser(user: string) { - const roles = [user, ...await this.getImplicitRolesForUser(user)]; + const roles = [user, ...(await this.getImplicitRolesForUser(user))]; const res: string[][] = []; roles.forEach(n => { res.push(...this.getPermissionsForUser(n)); @@ -350,8 +350,7 @@ export async function newEnforcer(...params: any[]): Promise { if (typeof params[0] === 'string') { await e.initWithFile(params[0], ''); } else { - // @ts-ignore - await e.initWithModelAndAdapter(params[0], null); + await e.initWithModelAndAdapter(params[0]); } } else if (params.length === parsedParamLen) { await e.initWithFile('', ''); diff --git a/src/log/logUtil.ts b/src/log/logUtil.ts index 1d60e39f..2263c793 100644 --- a/src/log/logUtil.ts +++ b/src/log/logUtil.ts @@ -37,9 +37,4 @@ function logPrintf(format: string, ...v: any[]) { logger.printf(format, ...v); } -export { - setLogger, - getLogger, - logPrint, - logPrintf -}; +export { setLogger, getLogger, logPrint, logPrintf }; diff --git a/src/model/assertion.ts b/src/model/assertion.ts index e5f1778d..fa0b2ef5 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -41,9 +41,7 @@ export class Assertion { const count = _.words(this.value, /_/g).length; for (const rule of this.policy) { if (count < 2) { - throw new Error( - 'the number of "_" in role definition should be at least 2' - ); + throw new Error('the number of "_" in role definition should be at least 2'); } if (rule.length < count) { diff --git a/src/model/model.ts b/src/model/model.ts index 4c02738b..5874e14e 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -57,7 +57,7 @@ export class Model { private loadSection(cfg: Config, sec: string): void { // console.log('loadSection: ', sec); let i = 1; - for (; ;) { + for (;;) { if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { break; } else { @@ -139,7 +139,7 @@ export class Model { if (!astMap) { return; } - astMap.forEach(async (value) => { + astMap.forEach(async value => { await value.buildRoleLinks(rm); }); } @@ -158,7 +158,7 @@ export class Model { // getPolicy gets all rules in a policy. public getPolicy(sec: string, key: string): string[][] { const policy: string[][] = []; - const ast = (this.model.get(sec) || new Map()).get(key); + const ast = this.model.get(sec)!.get(key); if (ast) { policy.push(...ast.policy); } @@ -167,7 +167,7 @@ export class Model { // hasPolicy determines whether a model has the specified policy rule. public hasPolicy(sec: string, key: string, rule: string[]): boolean { - const ast = (this.model.get(sec) || new Map()).get(key); + const ast = this.model.get(sec)!.get(key); if (!ast) { return false; } @@ -177,7 +177,7 @@ export class Model { // addPolicy adds a policy rule to the model. public addPolicy(sec: string, key: string, rule: string[]): boolean { if (!this.hasPolicy(sec, key, rule)) { - const ast = (this.model.get(sec) || new Map()).get(key); + const ast = this.model.get(sec)!.get(key); if (!ast) { return false; } @@ -191,7 +191,7 @@ export class Model { // removePolicy removes a policy rule from the model. public removePolicy(sec: string, key: string, rule: string[]): boolean { if (this.hasPolicy(sec, key, rule)) { - const ast = (this.model.get(sec) || new Map()).get(key); + const ast = this.model.get(sec)!.get(key); if (!ast) { return true; } @@ -205,7 +205,7 @@ export class Model { // getFilteredPolicy gets rules based on field filters from a policy. public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): string[][] { const res: string[][] = []; - const ast = (this.model.get(sec) || new Map()).get(key); + const ast = this.model.get(sec)!.get(key); if (!ast) { return res; } @@ -231,7 +231,7 @@ export class Model { public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): boolean { const res = []; let bool = false; - const ast = (this.model.get(sec) || new Map()).get(key); + const ast = this.model.get(sec)!.get(key); if (!ast) { return bool; } @@ -259,7 +259,7 @@ export class Model { // getValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed. public getValuesForFieldInPolicy(sec: string, key: string, fieldIndex: number): string[] { const values: string[] = []; - const ast = (this.model.get(sec) || new Map()).get(key); + const ast = this.model.get(sec)!.get(key); if (!ast) { return values; } diff --git a/src/persist/adapter.ts b/src/persist/adapter.ts index 7326d9c7..733e6fb8 100644 --- a/src/persist/adapter.ts +++ b/src/persist/adapter.ts @@ -23,6 +23,5 @@ export interface Adapter { removePolicy(sec: string, ptype: string, rule: string[]): Promise; - removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[] - ): Promise; + removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise; } diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 696f8cc8..26135e9a 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -9,8 +9,7 @@ export class Filter { public p: string[] = []; } -export class DefaultFilteredAdapter extends FileAdapter - implements FilteredAdapter { +export class DefaultFilteredAdapter extends FileAdapter implements FilteredAdapter { private filtered: boolean; constructor(filePath: string) { @@ -38,8 +37,7 @@ export class DefaultFilteredAdapter extends FileAdapter this.filtered = true; } - private async loadFilteredPolicyFile(model: Model, filter: Filter, handler: (line: string, model: Model) => void - ): Promise { + private async loadFilteredPolicyFile(model: Model, filter: Filter, handler: (line: string, model: Model) => void): Promise { const bodyBuf = await readFile(this.filePath); const lines = bodyBuf.toString().split('\n'); lines.forEach((n: string, index: number) => { diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 37ab8e01..7c9c5b82 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -116,9 +116,7 @@ export class DefaultRoleManager implements RoleManager { return []; } - let users = [...this.allRoles.values()] - .filter(n => n.hasDirectRole(name)) - .map(n => n.name); + let users = [...this.allRoles.values()].filter(n => n.hasDirectRole(name)).map(n => n.name); if (domain.length === 1) { users = users.map(n => n.substring(domain[0].length + 2, n.length)); } diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 6b9f8e7e..6757c1f8 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -108,9 +108,7 @@ function regexMatchFunc(...args: any[]): boolean { function ipMatch(ip1: string, ip2: string): boolean { // check ip1 if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { - throw new Error( - 'invalid argument: ip1 in ipMatch() function is not an IP address.' - ); + throw new Error('invalid argument: ip1 in ipMatch() function is not an IP address.'); } // check ip2 const cidrParts: string[] = ip2.split('/'); @@ -119,9 +117,7 @@ function ipMatch(ip1: string, ip2: string): boolean { } else { if (!(ip.isV4Format(ip2) || ip.isV6Format(ip2))) { console.log(ip2); - throw new Error( - 'invalid argument: ip2 in ipMatch() function is not an IP address.' - ); + throw new Error('invalid argument: ip2 in ipMatch() function is not an IP address.'); } return ip.isEqual(ip1, ip2); } @@ -152,11 +148,4 @@ function generateGFunction(rm: rbac.RoleManager): any { }; } -export { - keyMatchFunc, - keyMatch2Func, - keyMatch3Func, - regexMatchFunc, - ipMatchFunc, - generateGFunction -}; +export { keyMatchFunc, keyMatch2Func, keyMatch3Func, regexMatchFunc, ipMatchFunc, generateGFunction }; diff --git a/src/util/util.ts b/src/util/util.ts index 75a67f1f..7976db17 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -74,7 +74,7 @@ function readFile(path: string, encoding?: string): any { // writeFile return a promise for writeFile. function writeFile(path: string, file: string, encoding?: string): any { return new Promise((resolve, reject) => { - fs.writeFile(path, file, encoding || 'utf8', (error) => { + fs.writeFile(path, file, encoding || 'utf8', error => { if (error) { reject(error); } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 7ac6c7db..e4efa7fa 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -140,8 +140,7 @@ test('TestRBACModelInMemory', async () => { }); test('TestRBACModelInMemory2', async () => { - const text = - ` + const text = ` [request_definition] r = sub, obj, act @@ -207,7 +206,12 @@ test('TestReloadPolicy', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await e.loadPolicy(); - testGetPolicy(e, [['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); + testGetPolicy(e, [ + ['alice', 'data1', 'read'], + ['bob', 'data2', 'write'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write'] + ]); }); test('TestSavePolicy', async () => { @@ -294,7 +298,7 @@ test('TestEnableAutoSave', async () => { // TODO debug // Because AutoSave is enabled, the policy change not only affects the policy in Casbin enforcer, // but also affects the policy in the storage. - // await e.removePolicy('alice', 'data1', 'read'); + // await e.removePolicy('alice', 'data1', 'read'); // However, the file adapter doesn't implement the AutoSave feature, so enabling it has no effect at all here. diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 23a7deeb..0227f7ba 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -97,8 +97,8 @@ it('getNamedPolicy', async () => { ['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write']] - ); + ['data2_admin', 'data2', 'write'] + ]); namedPolicy = e.getNamedPolicy('p1'); testArray2DEquals(namedPolicy, []); }); @@ -110,30 +110,22 @@ it('getFilteredNamedPolicy', async () => { it('getGroupingPolicy', async () => { const groupingPolicy = e.getGroupingPolicy(); - testArray2DEquals(groupingPolicy, [[ - 'alice', 'data2_admin' - ]]); + testArray2DEquals(groupingPolicy, [['alice', 'data2_admin']]); }); it('getFilteredGroupingPolicy', async () => { const filteredGroupingPolicy = e.getFilteredGroupingPolicy(0, 'alice'); - testArray2DEquals(filteredGroupingPolicy, [[ - 'alice', 'data2_admin' - ]]); + testArray2DEquals(filteredGroupingPolicy, [['alice', 'data2_admin']]); }); it('getNamedGroupingPolicy', async () => { const namedGroupingPolicy = e.getNamedGroupingPolicy('g'); - testArray2DEquals(namedGroupingPolicy, [[ - 'alice', 'data2_admin' - ]]); + testArray2DEquals(namedGroupingPolicy, [['alice', 'data2_admin']]); }); it('getFilteredNamedGroupingPolicy', async () => { const namedGroupingPolicy = e.getFilteredNamedGroupingPolicy('g', 0, 'alice'); - testArray2DEquals(namedGroupingPolicy, [[ - 'alice', 'data2_admin' - ]]); + testArray2DEquals(namedGroupingPolicy, [['alice', 'data2_admin']]); }); it('hasPolicy', async () => { @@ -183,13 +175,13 @@ it('removeNamedPolicy', async () => { it('removeFilteredNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; - const removed = await e.removeFilteredNamedPolicy('p', 0, ...p); + const removed = await e.removeFilteredNamedPolicy('p', 0, ...p); expect(removed).toBe(true); expect(e.hasPolicy(...p)).toBe(false); }); it('hasGroupingPolicy', async () => { - const has = e.hasGroupingPolicy('alice', 'data2_admin'); + const has = e.hasGroupingPolicy('alice', 'data2_admin'); expect(has).toBe(true); }); diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index 7d96b3d6..38909c5e 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -28,5 +28,11 @@ it('test getImplicitRolesForUser with domain', async () => { it('test getImplicitPermissionsForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); - expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read'], ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write']]); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ + ['alice', 'data1', 'read'], + ['data1_admin', 'data1', 'read'], + ['data1_admin', 'data1', 'write'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write'] + ]); }); diff --git a/test/util.test.ts b/test/util.test.ts index f42cec0f..2d17f4b1 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -35,10 +35,8 @@ test('test logPrint', () => { }); test('test Valuate', () => { - // @ts-ignore - expect(compile('1 + 1 === 2')()).toEqual(true); - // @ts-ignore - expect(compile('1 + 1 !== 2')()).toEqual(false); + expect(compile('1 + 1 === 2')({})).toEqual(true); + expect(compile('1 + 1 !== 2')({})).toEqual(false); }); test('test regexMatchFunc', () => { From 147f1bd8f397f66bfd01c1c8c64a2a4ca826b688 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 5 Jun 2019 19:51:58 +0800 Subject: [PATCH 263/497] Update README.md for version 3.0 --- README.md | 195 ++++++++---------------------------------------------- 1 file changed, 26 insertions(+), 169 deletions(-) diff --git a/README.md b/README.md index 959d21d1..36df7901 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -node-Casbin -==== +# node-Casbin + [![NPM version][npm-image]][npm-url] [![NPM download][download-image]][download-url] [![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) @@ -14,24 +14,12 @@ node-Casbin [download-image]: https://img.shields.io/npm/dm/casbin.svg?style=flat-square [download-url]: https://npmjs.org/package/casbin -**News**: still worry about how to write the correct node-Casbin policy? ``Casbin online editor`` is coming to help! Try it at: http://casbin.org/editor/ +**News**: still worry about how to write the correct node-Casbin policy? `Casbin online editor` is coming to help! Try it at: http://casbin.org/en/editor/ ![casbin Logo](casbin-logo.png) node-Casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). -## All the languages supported by Casbin: - -[![golang](https://casbin.org/img/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/img/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/img/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/img/langs/php.png)](https://github.com/php-casbin/php-casbin) -----|----|----|---- -[Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) -production-ready | production-ready | production-ready | production-ready - -[![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/Devolutions/casbin-net) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/Devolutions/casbin-rs) -----|----|----|---- -[PyCasbin](https://github.com/casbin/pycasbin) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-Net](https://github.com/Devolutions/casbin-net) | [Casbin-RS](https://github.com/Devolutions/casbin-rs) -production-ready | experimental | WIP | WIP - ## Installation ``` @@ -42,174 +30,42 @@ npm install casbin --save 1. Initialize a new node-Casbin enforcer with a model file and a policy file: - ```typescript - import casbin from 'casbin'; - const enforcer = await casbin.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); - ``` - - Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details. + ```typescript + import casbin from 'casbin'; + const enforcer = await casbin.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); + ``` + + Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details. 2. Add an enforcement hook into your code right before the access happens: - ```typescript - const sub = 'alice'; // the user that wants to access a resource. - const obj = 'data1'; // the resource that is going to be accessed. - const act = 'read'; // the operation that the user performs on the resource. + ```typescript + const sub = 'alice'; // the user that wants to access a resource. + const obj = 'data1'; // the resource that is going to be accessed. + const act = 'read'; // the operation that the user performs on the resource. - if (enforcer.enforce(sub, obj, act) == true) { - // permit alice to read data1 - } else { - // deny the request, show an error - } - ``` + const res = await enforcer.enforce(sub, obj, act); + if (res) { + // permit alice to read data1 + } else { + // deny the request, show an error + } + ``` 3. Besides the static policy file, node-Casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: - ```typescript - const roles = enforcer.getRoles('alice'); - ``` - - See [Policy management APIs](#policy-management) for more usage. - -4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. - -## Table of contents - -- [Supported models](#supported-models) -- [How it works?](#how-it-works) -- [Features](#features) -- [Documentation](#documentation) -- [Online editor](#online-editor) -- [Tutorials](#tutorials) -- [Policy management](#policy-management) -- [Policy persistence](#policy-persistence) -- [Role manager](#role-manager) -- [Examples](#examples) -- [Middlewares](#middlewares) -- [Our adopters](#our-adopters) - -## Supported models - -1. [**ACL (Access Control List)**](https://en.wikipedia.org/wiki/Access_control_list) -2. **ACL with [superuser](https://en.wikipedia.org/wiki/Superuser)** -3. **ACL without users**: especially useful for systems that don't have authentication or user log-ins. -3. **ACL without resources**: some scenarios may target for a type of resources instead of an individual resource by using permissions like ``write-article``, ``read-log``. It doesn't control the access to a specific article or log. -4. **[RBAC (Role-Based Access Control)](https://en.wikipedia.org/wiki/Role-based_access_control)** -5. **RBAC with resource roles**: both users and resources can have roles (or groups) at the same time. -6. **RBAC with domains/tenants**: users can have different role sets for different domains/tenants. -7. **[ABAC (Attribute-Based Access Control)](https://en.wikipedia.org/wiki/Attribute-Based_Access_Control)**: syntax sugar like ``resource.Owner`` can be used to get the attribute for a resource. -8. **[RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer)**: supports paths like ``/res/*``, ``/res/:id`` and HTTP methods like ``GET``, ``POST``, ``PUT``, ``DELETE``. -9. **Deny-override**: both allow and deny authorizations are supported, deny overrides the allow. -10. **Priority**: the policy rules can be prioritized like firewall rules. - -## How it works? - -In node-Casbin, an access control model is abstracted into a CONF file based on the **PERM metamodel (Policy, Effect, Request, Matchers)**. So switching or upgrading the authorization mechanism for a project is just as simple as modifying a configuration. You can customize your own access control model by combining the available models. For example, you can get RBAC roles and ABAC attributes together inside one model and share one set of policy rules. - -The most basic and simplest model in node-Casbin is ACL. ACL's model CONF is: - -```ini -# Request definition -[request_definition] -r = sub, obj, act - -# Policy definition -[policy_definition] -p = sub, obj, act - -# Policy effect -[policy_effect] -e = some(where (p.eft == allow)) - -# Matchers -[matchers] -m = r.sub == p.sub && r.obj == p.obj && r.act == p.act -``` - -An example policy for ACL model is like: + ```typescript + const roles = enforcer.getRolesForUser('alice'); + ``` -``` -p, alice, data1, read -p, bob, data2, write -``` - -It means: - -- alice can read data1 -- bob can write data2 - -## Features + See [Policy management APIs](#policy-management) for more usage. -What node-Casbin does: - -1. enforce the policy in the classic ``{subject, object, action}`` form or a customized form as you defined, both allow and deny authorizations are supported. -2. handle the storage of the access control model and its policy. -3. manage the role-user mappings and role-role mappings (aka role hierarchy in RBAC). -4. support built-in superuser like ``root`` or ``administrator``. A superuser can do anything without explict permissions. -5. multiple built-in operators to support the rule matching. For example, ``keyMatch`` can map a resource key ``/foo/bar`` to the pattern ``/foo*``. - -What node-Casbin does NOT do: - -1. authentication (aka verify ``username`` and ``password`` when a user logs in) -2. manage the list of users or roles. I believe it's more convenient for the project itself to manage these entities. Users usually have their passwords, and node-Casbin is not designed as a password container. However, node-Casbin stores the user-role mapping for the RBAC scenario. +4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. ## Documentation https://casbin.org/docs/en/overview -## Online editor - -You can also use the online editor (http://casbin.org/editor/) to write your node-Casbin model and policy in your web browser. It provides functionality such as ``syntax highlighting`` and ``code completion``, just like an IDE for a programming language. - -## Tutorials - -https://casbin.org/docs/en/tutorials - -## Policy management - -node-Casbin provides two sets of APIs to manage permissions: - -- [Management API](https://casbin.org/docs/en/management-api): the primitive API that provides full support for node-Casbin policy management. -- [RBAC API](https://casbin.org/docs/en/management-api): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. - -We also provide a web-based UI for model management and policy management: - -![model editor](https://hsluoyz.github.io/casbin/ui_model_editor.png) - -![policy editor](https://hsluoyz.github.io/casbin/ui_policy_editor.png) - -## Policy persistence - -https://casbin.org/docs/en/adapters - -## Role manager - -https://casbin.org/docs/en/role-managers - -## Examples - -Model | Model file | Policy file -----|------|---- -ACL | [basic_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_model.conf) | [basic_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_policy.csv) -ACL with superuser | [basic_model_with_root.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_with_root_model.conf) | [basic_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_policy.csv) -ACL without users | [basic_model_without_users.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_users_model.conf) | [basic_policy_without_users.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_users_policy.csv) -ACL without resources | [basic_model_without_resources.conf](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_resources_model.conf) | [basic_policy_without_resources.csv](https://github.com/casbin/node-casbin/blob/master/examples/basic_without_resources_policy.csv) -RBAC | [rbac_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_model.conf) | [rbac_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_policy.csv) -RBAC with resource roles | [rbac_model_with_resource_roles.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_resource_roles_model.conf) | [rbac_policy_with_resource_roles.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_resource_roles_policy.csv) -RBAC with domains/tenants | [rbac_model_with_domains.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_domains_model.conf) | [rbac_policy_with_domains.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_domains_policy.csv) -ABAC | [abac_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/abac_model.conf) | N/A -RESTful | [keymatch_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/keymatch_model.conf) | [keymatch_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/keymatch_policy.csv) -Deny-override | [rbac_model_with_deny.conf](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_deny_model.conf) | [rbac_policy_with_deny.csv](https://github.com/casbin/node-casbin/blob/master/examples/rbac_with_deny_policy.csv) -Priority | [priority_model.conf](https://github.com/casbin/node-casbin/blob/master/examples/priority_model.conf) | [priority_policy.csv](https://github.com/casbin/node-casbin/blob/master/examples/priority_policy.csv) - -## Middlewares - -Authz middlewares for web frameworks: https://casbin.org/docs/en/middlewares - -## Our adopters - -https://casbin.org/docs/en/adopters - ## License This project is licensed under the [Apache 2.0 license](LICENSE). @@ -217,6 +73,7 @@ This project is licensed under the [Apache 2.0 license](LICENSE). ## Contact If you have any issues or feature requests, please contact us. PR is welcomed. + - https://github.com/casbin/node-casbin/issues - hsluoyz@gmail.com - Tencent QQ group: [546057381](//shang.qq.com/wpa/qunwpa?idkey=8ac8b91fc97ace3d383d0035f7aa06f7d670fd8e8d4837347354a31c18fac885) From 8dc98d1374677a9f70acec35713e7ab11e5d8b8f Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 5 Jun 2019 21:46:00 +0800 Subject: [PATCH 264/497] Bump to v3.0.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5347cf2c..e17fbfd1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.0-beta.1", + "version": "3.0.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -59,6 +59,6 @@ ] }, "publishConfig": { - "registry": "https://registry.npmjs.org" + "registry": "https://registry.yarnpkg.com" } } From 54d7c8996a33bd345777343486477dab28bfe332 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 10 Jun 2019 22:10:16 +0800 Subject: [PATCH 265/497] Add the language table back. --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 36df7901..043b037b 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,18 @@ node-Casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). +## All the languages supported by Casbin: + +[![golang](https://casbin.org/img/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/img/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/img/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/img/langs/php.png)](https://github.com/php-casbin/php-casbin) +----|----|----|---- +[Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) +production-ready | production-ready | production-ready | production-ready + +[![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/Devolutions/casbin-rs) +----|----|----|---- +[PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/Devolutions/casbin-rs) +production-ready | production-ready | experimental | WIP + ## Installation ``` From cab0ceb36f125e074314f37856f9543a9b2fc445 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 14 Jun 2019 23:26:55 +0800 Subject: [PATCH 266/497] Fix the escape of the matcher --- package.json | 2 + src/model/model.ts | 16 + yarn.lock | 882 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 892 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index e17fbfd1..21dbbc73 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "devDependencies": { "@types/ip": "^0.0.31", "@types/jest": "^24.0.11", + "@types/jscodeshift": "^0.6.0", "@types/lodash": "^4.14.113", "@types/node": "^10.5.3", "coveralls": "^3.0.2", @@ -30,6 +31,7 @@ "dependencies": { "expression-eval": "^2.0.0", "ip": "^1.1.5", + "jscodeshift": "^0.6.4", "lodash": "^4.17.10" }, "files": [ diff --git a/src/model/model.ts b/src/model/model.ts index 5874e14e..913d8e12 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -15,6 +15,7 @@ import * as _ from 'lodash'; import * as rbac from '../rbac'; import * as util from '../util'; +import * as j from 'jscodeshift'; import { Config } from '../config'; import { Assertion } from './assertion'; import { logPrint } from '../log'; @@ -83,6 +84,21 @@ export class Model { tokens[i] = key + '_' + tokens[i]; } ast.tokens = tokens; + } else if (sec === 'm') { + const mAST = j(util.removeComments(value)); + let hasEscape = false; + + mAST.find(j.Literal).forEach(path => { + let n = path.value.value; + if (typeof n === 'string' && n.includes('.')) { + hasEscape = true; + n = n.replace(/\./g, '\\.'); + j(path).replaceWith(j.literal(n)); + } + }); + + value = util.escapeAssertion(mAST.toSource()); + ast.value = hasEscape ? value.replace(/\\\\./g, '.') : value; } else { ast.value = util.removeComments(util.escapeAssertion(value)); } diff --git a/yarn.lock b/yarn.lock index 3f1b2cf7..83d62ea6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,6 +29,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.6": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" + integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helpers" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.5" + "@babel/types" "^7.4.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.0.0", "@babel/generator@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" @@ -40,6 +60,59 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-create-class-features-plugin@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" + integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" + +"@babel/helper-define-map@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" + integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.4.4" + lodash "^4.17.11" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -56,11 +129,87 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" + integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.4.4" + lodash "^4.17.11" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" + integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== + dependencies: + lodash "^4.17.11" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" + integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + "@babel/helper-split-export-declaration@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" @@ -68,6 +217,16 @@ dependencies: "@babel/types" "^7.4.4" +"@babel/helper-wrap-function@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" + integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.2.0" + "@babel/helpers@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" @@ -91,13 +250,444 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== -"@babel/plugin-syntax-object-rest-spread@^7.0.0": +"@babel/parser@^7.1.6", "@babel/parser@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" + integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== + +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" + integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + +"@babel/plugin-proposal-class-properties@^7.1.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" + integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" + integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" + integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" + integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-typescript@^7.2.0": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" + integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" + integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" + integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.11" + +"@babel/plugin-transform-classes@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" + integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.4.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" + integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" + integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + +"@babel/plugin-transform-duplicate-keys@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" + integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz#d267a081f49a8705fc9146de0768c6b58dccd8f7" + integrity sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + +"@babel/plugin-transform-for-of@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-member-expression-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" + integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-commonjs@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" + integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== + dependencies: + "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + +"@babel/plugin-transform-modules-systemjs@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" + integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" + integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== + dependencies: + regexp-tree "^0.1.6" + +"@babel/plugin-transform-new-target@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" + integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + +"@babel/plugin-transform-parameters@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" + integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.2.0": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" + integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typescript@^7.3.2": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz#ab3351ba35307b79981993536c93ff8be050ba28" + integrity sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-typescript" "^7.2.0" + +"@babel/plugin-transform-unicode-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" + integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + +"@babel/preset-env@^7.1.6": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" + integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.4.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.4.4" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.4.4" + "@babel/plugin-transform-classes" "^7.4.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.4.4" + "@babel/plugin-transform-modules-systemjs" "^7.4.4" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.4.4" + "@babel/types" "^7.4.4" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + +"@babel/preset-flow@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2" + integrity sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + +"@babel/preset-typescript@^7.1.0": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" + integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.3.2" + +"@babel/register@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.4.tgz#370a68ba36f08f015a8b35d4864176c6b65d7a23" + integrity sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA== + dependencies: + core-js "^3.0.0" + find-cache-dir "^2.0.0" + lodash "^4.17.11" + mkdirp "^0.5.1" + pirates "^4.0.0" + source-map-support "^0.5.9" + "@babel/runtime@^7.0.0": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d" @@ -129,7 +719,22 @@ globals "^11.1.0" lodash "^4.17.11" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": +"@babel/traverse@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" + integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/types" "^7.4.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== @@ -354,6 +959,14 @@ dependencies: "@types/jest-diff" "*" +"@types/jscodeshift@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/jscodeshift/-/jscodeshift-0.6.0.tgz#b3c59f9d2c863385dc91fee54fb98e1a54646e0c" + integrity sha512-LmkndrS2aed1H7+goMB9zxqpcL5zyObVZzR9uO8VmyPfyrf2NfVPZnOU9n3p2bIZ/6rW3alKldQpxatHVFz7Gw== + dependencies: + ast-types "0.12.1" + recast "0.17.2" + "@types/lodash@^4.14.113": version "4.14.123" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" @@ -558,6 +1171,16 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types@0.11.7: + version "0.11.7" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" + integrity sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw== + +ast-types@0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.12.1.tgz#55d3737a8a68e1ccde131067005ce7ee3dd42b99" + integrity sha512-H2izJAyT2xwew4TxShpmxe6f9R5hHgJQy1QloLiUC2yrJMtyraBWNJL7903rpeCY9keNUipORR/zIUC2XcYKng== + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -595,6 +1218,11 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +babel-core@^7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + babel-jest@^24.7.1: version "24.7.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" @@ -693,6 +1321,15 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" +browserslist@^4.6.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.2.tgz#574c665950915c2ac73a4594b8537a9eba26203f" + integrity sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q== + dependencies: + caniuse-lite "^1.0.30000974" + electron-to-chromium "^1.3.150" + node-releases "^1.1.23" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -766,6 +1403,11 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +caniuse-lite@^1.0.30000974: + version "1.0.30000974" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8" + integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -872,6 +1514,11 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +colors@^1.1.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" @@ -884,6 +1531,11 @@ commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + compare-versions@^3.2.1: version "3.4.0" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" @@ -916,6 +1568,25 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.3.tgz#0cc3ba4c7f62928c2837e1cffbe8dc78b4f1ae14" + integrity sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA== + dependencies: + browserslist "^4.6.0" + core-js-pure "3.1.3" + semver "^6.1.0" + +core-js-pure@3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.3.tgz#4c90752d5b9471f641514f3728f51c1e0783d0b5" + integrity sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA== + +core-js@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.3.tgz#95700bca5f248f5f78c0ec63e784eca663ec4138" + integrity sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1126,6 +1797,11 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +electron-to-chromium@^1.3.150: + version "1.3.159" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.159.tgz#4292643c5cb77678821ce01557ba6dd0f562db5e" + integrity sha512-bhiEr8/A97GUBcUzNb9MFNhzQOjakbKmEKBEAa6UMY45zG2e8PM63LOgAPXEJE9bQiaQH6nOdYiYf8X821tZjQ== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -1188,7 +1864,7 @@ esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -1357,6 +2033,15 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" @@ -1376,6 +2061,11 @@ find-up@^4.0.0: dependencies: locate-path "^5.0.0" +flow-parser@0.*: + version "0.101.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.101.0.tgz#9d355cd749ef526e99aecb3b195980e2567ab07c" + integrity sha512-Goi71MNzZkL530ZEEpedxLlFFiCA/M4J+nJA8zHSTSpHnDCL3WYpr2NYFHmUczpG80Hq9xTYdQYfGQEk7Dl5Ww== + fn-name@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" @@ -1711,7 +2401,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -2386,6 +3076,11 @@ jest@^24.3.1: import-local "^2.0.0" jest-cli "^24.7.1" +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -2404,6 +3099,30 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jscodeshift@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.6.4.tgz#e19ab86214edac86a75c4557fc88b3937d558a8e" + integrity sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ== + dependencies: + "@babel/core" "^7.1.6" + "@babel/parser" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/preset-env" "^7.1.6" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-typescript" "^7.1.0" + "@babel/register" "^7.0.0" + babel-core "^7.0.0-bridge.0" + colors "^1.1.2" + flow-parser "0.*" + graceful-fs "^4.1.11" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.16.1" + temp "^0.8.1" + write-file-atomic "^2.3.0" + jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -2446,6 +3165,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2687,7 +3411,7 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -make-dir@^2.1.0: +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -2790,7 +3514,7 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -2888,6 +3612,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +neo-async@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + neo-async@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" @@ -2898,6 +3627,13 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= + dependencies: + minimatch "^3.0.2" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -2935,6 +3671,13 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" +node-releases@^1.1.23: + version "1.1.23" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0" + integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w== + dependencies: + semver "^5.3.0" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -3268,7 +4011,7 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pirates@^4.0.1: +pirates@^4.0.0, pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== @@ -3326,6 +4069,11 @@ pretty-format@^24.7.0: ansi-styles "^3.2.0" react-is "^16.8.4" +private@^0.1.6, private@~0.1.5: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" @@ -3434,11 +4182,50 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +recast@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.17.2.tgz#f18f18cf20bf3fad4522621a7f9c2ada37276814" + integrity sha512-YHFvn4rBXl8eIjALjUiOV/AP3xFpyGNGNHDw9mAncAWuIdgnBKjbZQ9+P3VlsKcNaNapRVFlTEX1dvDRlYwyxg== + dependencies: + ast-types "0.12.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +recast@^0.16.1: + version "0.16.2" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2" + integrity sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A== + dependencies: + ast-types "0.11.7" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +regenerate-unicode-properties@^8.0.2: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + regenerator-runtime@^0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== +regenerator-transform@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" + integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== + dependencies: + private "^0.1.6" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -3447,6 +4234,35 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp-tree@^0.1.6: + version "0.1.10" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" + integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== + +regexpu-core@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.0.2" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" + integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== + +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3568,6 +4384,11 @@ rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: dependencies: glob "^7.1.3" +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= + rsvp@^4.8.4: version "4.8.4" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" @@ -3637,6 +4458,11 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== +semver@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" + integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -3752,7 +4578,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6: +source-map-support@^0.5.6, source-map-support@^0.5.9: version "0.5.12" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== @@ -3980,6 +4806,14 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" +temp@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + test-exclude@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.2.tgz#7322f8ab037b0b93ad2aab35fe9068baf997a4c4" @@ -4146,6 +4980,29 @@ uglify-js@^3.1.4: commander "~2.20.0" source-map "~0.6.1" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -4324,6 +5181,15 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" From a3272e58de5a9a5561fa2ac354d3e0e524f506fe Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 14 Jun 2019 23:43:10 +0800 Subject: [PATCH 267/497] v3.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 21dbbc73..4d8c9444 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.0", + "version": "3.0.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 4b221c521638802a5c7fda0f08909afe32667df2 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 15 Jun 2019 21:09:04 +0800 Subject: [PATCH 268/497] Remove Patreon badge in README. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 043b037b..47beef1d 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ [![Coverage Status](https://coveralls.io/repos/github/casbin/node-casbin/badge.svg?branch=master)](https://coveralls.io/github/casbin/node-casbin?branch=master) [![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) -[![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](http://www.patreon.com/yangluo) [npm-image]: https://img.shields.io/npm/v/casbin.svg?style=flat-square [npm-url]: https://npmjs.org/package/casbin From 1a8d0a94771dcbfa9b313d55055c41ce3f0a14b1 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 10:53:46 -0400 Subject: [PATCH 269/497] string adapter extends interface --- src/persist/stringAdapter.ts | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/persist/stringAdapter.ts diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts new file mode 100644 index 00000000..9ad24f97 --- /dev/null +++ b/src/persist/stringAdapter.ts @@ -0,0 +1,66 @@ +import { Adapter } from './adapter'; +import { Model } from '../model'; +import { Helper } from './helper'; + +/** + * FileAdapter is the file adapter for Casbin. + * It can load policy from file or save policy to file. + */ +export class FileAdapter implements Adapter { + public readonly policy: string; + + /** + * FileAdapter is the constructor for FileAdapter. + * @param {string} policy policy formatted as a CSV string. + */ + + constructor (policy: string) { + this.policy = policy + } + + public async loadPolicy(model: Model): Promise { + if (!this.policy) { + throw new Error('Invalid policy, policy document cannot be false-y') + } + await this.loadRules(model, Helper.loadPolicyLine) + } + + async loadRules(model: Model, handler: (line: string, model: Model) => void): Promise { + const rules = this.policy.split('\n'); + rules.forEach((n: string, index: number) => { + const line = n.trim(); + if (!line) { + return; + } + handler(n, model); + }); + } + + /** + * savePolicy saves all policy rules to the storage. + */ + public async savePolicy(model: Model): Promise { + throw new Error('not implemented'); + } + + /** + * addPolicy adds a policy rule to the storage. + */ + public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { + throw new Error('not implemented'); + } + + /** + * removePolicy removes a policy rule from the storage. + */ + public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { + throw new Error('not implemented'); + } + + /** + * removeFilteredPolicy removes policy rules that match the filter from the storage. + */ + public async removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + throw new Error('not implemented'); + } +} From 6595d540581b0d76b559a7b6a538931bf9c11351 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 11:01:50 -0400 Subject: [PATCH 270/497] export string adapter --- src/enforcer.ts | 12 +++++++++++- src/persist/index.ts | 1 + src/persist/stringAdapter.ts | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 68b52968..318633cb 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -14,7 +14,7 @@ import { ManagementEnforcer } from './managementEnforcer'; import { FunctionMap, Model, newModel } from './model'; -import { Adapter, FileAdapter } from './persist'; +import { Adapter, FileAdapter, StringAdapter } from './persist'; import { getLogger } from './log'; /** @@ -31,6 +31,16 @@ export class Enforcer extends ManagementEnforcer { await this.initWithAdapter(modelPath, a); } + /** + * initWithFile initializes an enforcer with a model file and a policy file. + * @param modelPath model file path + * @param policyString policy CSV string + */ + public async initWithString(modelPath: string, policyString: string): Promise { + const a = new StringAdapter(policyString); + await this.initWithAdapter(modelPath, a); + } + /** * initWithAdapter initializes an enforcer with a database adapter. * @param modelPath model file path diff --git a/src/persist/index.ts b/src/persist/index.ts index d3a43520..d0100fde 100644 --- a/src/persist/index.ts +++ b/src/persist/index.ts @@ -1,5 +1,6 @@ export * from './adapter'; export * from './fileAdapter'; +export * from './stringAdapter'; export * from './helper'; export * from './watcher'; export * from './filteredAdapter'; diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 9ad24f97..63c071b8 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -6,7 +6,7 @@ import { Helper } from './helper'; * FileAdapter is the file adapter for Casbin. * It can load policy from file or save policy to file. */ -export class FileAdapter implements Adapter { +export class StringAdapter implements Adapter { public readonly policy: string; /** From 60526bf828991cd46c4c19bf09cc9a9e611c4ffe Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 14:49:57 -0400 Subject: [PATCH 271/497] string adapter tests --- test/enforcer.test.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index e4efa7fa..19e48fc1 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -12,7 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { newModel, newEnforcer, Enforcer, FileAdapter, Util } from '../src'; +import { readFileSync } from 'fs'; + +import { newModel, newEnforcer, Enforcer, FileAdapter, StringAdapter, Util } from '../src'; async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean) { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); @@ -328,6 +330,21 @@ test('TestInitWithAdapter', async () => { await testEnforce(e, 'bob', 'data2', 'write', true); }); +test('TestInitWithStringAdapter', async () => { + const policy = await readFileSync('examples/basic_policy.csv').toString(); + const adapter = new StringAdapter(policy); + const e = await newEnforcer('examples/basic_model.conf', adapter); + + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); +}); + test('TestRoleLinks', async () => { const e = await newEnforcer('examples/rbac_model.conf'); e.enableAutoBuildRoleLinks(false); From 85a6a34d102b6af35d87a5237349acc91c34c917 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 14:53:15 -0400 Subject: [PATCH 272/497] lint, jest tests --- src/persist/stringAdapter.ts | 10 +++++----- test/enforcer.test.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 63c071b8..95b7f2ba 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -14,18 +14,18 @@ export class StringAdapter implements Adapter { * @param {string} policy policy formatted as a CSV string. */ - constructor (policy: string) { - this.policy = policy + constructor(policy: string) { + this.policy = policy; } public async loadPolicy(model: Model): Promise { if (!this.policy) { - throw new Error('Invalid policy, policy document cannot be false-y') + throw new Error('Invalid policy, policy document cannot be false-y'); } - await this.loadRules(model, Helper.loadPolicyLine) + await this.loadRules(model, Helper.loadPolicyLine); } - async loadRules(model: Model, handler: (line: string, model: Model) => void): Promise { + private async loadRules(model: Model, handler: (line: string, model: Model) => void): Promise { const rules = this.policy.split('\n'); rules.forEach((n: string, index: number) => { const line = n.trim(); diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 19e48fc1..5d8b7242 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -331,7 +331,7 @@ test('TestInitWithAdapter', async () => { }); test('TestInitWithStringAdapter', async () => { - const policy = await readFileSync('examples/basic_policy.csv').toString(); + const policy = readFileSync('examples/basic_policy.csv').toString(); const adapter = new StringAdapter(policy); const e = await newEnforcer('examples/basic_model.conf', adapter); From 6048b3d9f37d8d6675d60e87a036d0ebad8df3d0 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 14:58:46 -0400 Subject: [PATCH 273/497] Fix Codebeat error: Too many function arguments --- src/persist/stringAdapter.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 95b7f2ba..ef3f08f9 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -56,11 +56,4 @@ export class StringAdapter implements Adapter { public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { throw new Error('not implemented'); } - - /** - * removeFilteredPolicy removes policy rules that match the filter from the storage. - */ - public async removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - throw new Error('not implemented'); - } } From f8581fdb836b31e1f059c092add1a79fd35cd4c0 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 15:49:31 -0400 Subject: [PATCH 274/497] comments, fix travis ci error --- src/persist/stringAdapter.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index ef3f08f9..8efe14b6 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -3,14 +3,14 @@ import { Model } from '../model'; import { Helper } from './helper'; /** - * FileAdapter is the file adapter for Casbin. - * It can load policy from file or save policy to file. + * StringAdapter is the string adapter for Casbin. + * It can load policy from a string. */ export class StringAdapter implements Adapter { public readonly policy: string; /** - * FileAdapter is the constructor for FileAdapter. + * StringAdapter is the constructor for StringAdapter. * @param {string} policy policy formatted as a CSV string. */ @@ -56,4 +56,11 @@ export class StringAdapter implements Adapter { public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { throw new Error('not implemented'); } + + /** + * removeFilteredPolicy removes policy rules that match the filter from the storage. + */ + public async removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + throw new Error('not implemented'); + } } From f96e91a51f5ea9064574abb7b363a1e575e71ad8 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 16:04:07 -0400 Subject: [PATCH 275/497] test set adapter from string after enforcer init --- test/enforcer.test.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 5d8b7242..1606eeeb 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -389,6 +389,20 @@ test('TestSetAdapterFromFile', async () => { await testEnforce(e, 'alice', 'data1', 'read', true); }); +test('TestSetAdapterFromString', async () => { + const e = await newEnforcer('examples/basic_model.conf'); + + await testEnforce(e, 'alice', 'data1', 'read', false); + + const policy = readFileSync('examples/basic_policy.csv').toString(); + + const a = new StringAdapter(policy); + e.setAdapter(a); + await e.loadPolicy(); + + await testEnforce(e, 'alice', 'data1', 'read', true); +}); + test('TestInitEmpty', async () => { const e = await newEnforcer(); From 74525bf0c9a1aeb999f1a30b23816a60888199d1 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 16:47:29 -0400 Subject: [PATCH 276/497] test init empty with string adapter --- test/enforcer.test.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 1606eeeb..8960e483 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -403,7 +403,7 @@ test('TestSetAdapterFromString', async () => { await testEnforce(e, 'alice', 'data1', 'read', true); }); -test('TestInitEmpty', async () => { +test('TestInitEmpty with File Adapter', async () => { const e = await newEnforcer(); const m = newModel(); @@ -420,3 +420,22 @@ test('TestInitEmpty', async () => { await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); }); + +test('TestInitEmpty with String Adapter', async () => { + const e = await newEnforcer(); + + const m = newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); + + const policy = readFileSync('examples/keymatch_policy.csv').toString(); + const a = new StringAdapter(policy); + + e.setModel(m); + e.setAdapter(a); + await e.loadPolicy(); + + await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); +}); From 21ad08f75253b78f6671caaf3a6536922a6ccd25 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 17:08:49 -0400 Subject: [PATCH 277/497] first test for unimplemented, should throw err --- test/enforcer.test.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 8960e483..a47841a7 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -439,3 +439,32 @@ test('TestInitEmpty with String Adapter', async () => { await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); }); + +describe('Unimplemented String Adapter methods', () => { + let e = {} as Enforcer; + + beforeEach(async () => { + const policy = readFileSync('examples/basic_policy.csv').toString(); + const adapter = new StringAdapter(policy); + e = await newEnforcer('examples/basic_model.conf', adapter); + }); + + test('savePolicy', async () => { + await expect(e.savePolicy()).rejects.toThrow('not implemented'); + }); +}); + +// test('StringAdapter.savePolicy', async () => { + +// await expect(e.savePolicy()) +// .rejects +// .toThrow('not implemented'); + +// // await expect(e.addPolicy()) +// // .rejects +// // .toThrow('not implemented'); + +// await expect(e.removePolicy()) +// .rejects +// .toThrow('not implemented'); +// }) From e1ba1979fd2efe23e74f4f8c6d4790ee3cfcc279 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 17:32:32 -0400 Subject: [PATCH 278/497] more not implemented tests --- test/enforcer.test.ts | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index a47841a7..d5739c52 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -442,29 +442,23 @@ test('TestInitEmpty with String Adapter', async () => { describe('Unimplemented String Adapter methods', () => { let e = {} as Enforcer; + let a = {} as StringAdapter; beforeEach(async () => { const policy = readFileSync('examples/basic_policy.csv').toString(); - const adapter = new StringAdapter(policy); - e = await newEnforcer('examples/basic_model.conf', adapter); + a = new StringAdapter(policy); + e = await newEnforcer('examples/basic_model.conf', a); }); test('savePolicy', async () => { - await expect(e.savePolicy()).rejects.toThrow('not implemented'); + await expect(a.savePolicy(e.getModel())).rejects.toThrow('not implemented'); }); -}); - -// test('StringAdapter.savePolicy', async () => { - -// await expect(e.savePolicy()) -// .rejects -// .toThrow('not implemented'); -// // await expect(e.addPolicy()) -// // .rejects -// // .toThrow('not implemented'); + test('addPolicy', async () => { + await expect(a.addPolicy('', '', [''])).rejects.toThrow('not implemented'); + }); -// await expect(e.removePolicy()) -// .rejects -// .toThrow('not implemented'); -// }) + test('removeFilteredPolicy', async () => { + await expect(a.removeFilteredPolicy('', '', 0, '')).rejects.toThrow('not implemented'); + }); +}); From 3cf10fc60f525d40fdb686b6b5dd74a8ec7b2c20 Mon Sep 17 00:00:00 2001 From: Caleb Faruki Date: Sun, 16 Jun 2019 17:40:42 -0400 Subject: [PATCH 279/497] more unimplemented tests, for file adapter too --- test/enforcer.test.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index d5739c52..f478d14a 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -440,6 +440,28 @@ test('TestInitEmpty with String Adapter', async () => { await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); }); +describe('Unimplemented File Adapter methods', () => { + let e = {} as Enforcer; + let a = {} as FileAdapter; + + beforeEach(async () => { + a = new FileAdapter('examples/basic_policy.csv'); + e = await newEnforcer('examples/basic_model.conf', a); + }); + + test('addPolicy', async () => { + await expect(a.addPolicy('', '', [''])).rejects.toThrow('not implemented'); + }); + + test('removePolicy', async () => { + await expect(a.removePolicy('', '', [''])).rejects.toThrow('not implemented'); + }); + + test('removeFilteredPolicy', async () => { + await expect(a.removeFilteredPolicy('', '', 0, '')).rejects.toThrow('not implemented'); + }); +}); + describe('Unimplemented String Adapter methods', () => { let e = {} as Enforcer; let a = {} as StringAdapter; @@ -458,6 +480,10 @@ describe('Unimplemented String Adapter methods', () => { await expect(a.addPolicy('', '', [''])).rejects.toThrow('not implemented'); }); + test('removePolicy', async () => { + await expect(a.removePolicy('', '', [''])).rejects.toThrow('not implemented'); + }); + test('removeFilteredPolicy', async () => { await expect(a.removeFilteredPolicy('', '', 0, '')).rejects.toThrow('not implemented'); }); From 53aa9926a509f2034ea9f6c40face956f5554d7b Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 29 Jun 2019 22:51:25 +0800 Subject: [PATCH 280/497] Add Open Collective to README. --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.md b/README.md index 47beef1d..a454d7b3 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,32 @@ npm install casbin --save https://casbin.org/docs/en/overview +## Contributors + +This project exists thanks to all the people who contribute. + + +## Backers + +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/casbin#backer)] + + + +## Sponsors + +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/casbin#sponsor)] + + + + + + + + + + + + ## License This project is licensed under the [Apache 2.0 license](LICENSE). From 3b5f849fdc37ba4e4e9ce008b12f3f9fc4906333 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 6 Jul 2019 00:10:11 +0800 Subject: [PATCH 281/497] Add install size badge to README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a454d7b3..6c266216 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![NPM version][npm-image]][npm-url] [![NPM download][download-image]][download-url] +[![install size](https://packagephobia.now.sh/badge?p=casbin)](https://packagephobia.now.sh/result?p=casbin) [![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) [![Build Status](https://travis-ci.org/casbin/node-casbin.svg?branch=master)](https://travis-ci.org/casbin/node-casbin) [![Coverage Status](https://coveralls.io/repos/github/casbin/node-casbin/badge.svg?branch=master)](https://coveralls.io/github/casbin/node-casbin?branch=master) From f45a43dc369c914c3b14d6f1a0cc4f09c331c066 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 6 Jul 2019 13:27:57 +0800 Subject: [PATCH 282/497] Revert AST-based matcher escaping: https://github.com/casbin/node-casbin/commit/cab0ceb36f125e074314f37856f9543a9b2fc445 --- package.json | 2 - src/model/model.ts | 16 - yarn.lock | 9602 ++++++++++++++++++++------------------------ 3 files changed, 4344 insertions(+), 5276 deletions(-) diff --git a/package.json b/package.json index 4d8c9444..c67b1c87 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "devDependencies": { "@types/ip": "^0.0.31", "@types/jest": "^24.0.11", - "@types/jscodeshift": "^0.6.0", "@types/lodash": "^4.14.113", "@types/node": "^10.5.3", "coveralls": "^3.0.2", @@ -31,7 +30,6 @@ "dependencies": { "expression-eval": "^2.0.0", "ip": "^1.1.5", - "jscodeshift": "^0.6.4", "lodash": "^4.17.10" }, "files": [ diff --git a/src/model/model.ts b/src/model/model.ts index 913d8e12..5874e14e 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -15,7 +15,6 @@ import * as _ from 'lodash'; import * as rbac from '../rbac'; import * as util from '../util'; -import * as j from 'jscodeshift'; import { Config } from '../config'; import { Assertion } from './assertion'; import { logPrint } from '../log'; @@ -84,21 +83,6 @@ export class Model { tokens[i] = key + '_' + tokens[i]; } ast.tokens = tokens; - } else if (sec === 'm') { - const mAST = j(util.removeComments(value)); - let hasEscape = false; - - mAST.find(j.Literal).forEach(path => { - let n = path.value.value; - if (typeof n === 'string' && n.includes('.')) { - hasEscape = true; - n = n.replace(/\./g, '\\.'); - j(path).replaceWith(j.literal(n)); - } - }); - - value = util.escapeAssertion(mAST.toSource()); - ast.value = hasEscape ? value.replace(/\\\\./g, '.') : value; } else { ast.value = util.removeComments(util.escapeAssertion(value)); } diff --git a/yarn.lock b/yarn.lock index 83d62ea6..ef62826f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,5258 +1,4344 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@^7.1.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" - integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.1.6": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" - integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.5" - "@babel/types" "^7.4.4" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.0.0", "@babel/generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" - integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== - dependencies: - "@babel/types" "^7.4.4" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-create-class-features-plugin@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" - integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" - -"@babel/helper-define-map@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" - integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.4.4" - lodash "^4.17.11" - -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" - integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.4.4" - lodash "^4.17.11" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" - integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== - dependencies: - lodash "^4.17.11" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" - integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" - integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" - integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== - -"@babel/parser@^7.1.6", "@babel/parser@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" - integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@^7.1.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" - integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" - integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-flow@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" - integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" - integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" - integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.11" - -"@babel/plugin-transform-classes@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" - integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" - integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz#d267a081f49a8705fc9146de0768c6b58dccd8f7" - integrity sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" - -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" - integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== - dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - -"@babel/plugin-transform-modules-systemjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" - integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== - dependencies: - regexp-tree "^0.1.6" - -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== - dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== - dependencies: - regenerator-transform "^0.14.0" - -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typescript@^7.3.2": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz#ab3351ba35307b79981993536c93ff8be050ba28" - integrity sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" - -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/preset-env@^7.1.6": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" - integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.4.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.4.4" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.4.4" - "@babel/plugin-transform-classes" "^7.4.4" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.4.4" - "@babel/plugin-transform-modules-systemjs" "^7.4.4" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.4.4" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - -"@babel/preset-flow@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2" - integrity sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - -"@babel/preset-typescript@^7.1.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" - integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.3.2" - -"@babel/register@^7.0.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.4.4.tgz#370a68ba36f08f015a8b35d4864176c6b65d7a23" - integrity sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA== - dependencies: - core-js "^3.0.0" - find-cache-dir "^2.0.0" - lodash "^4.17.11" - mkdirp "^0.5.1" - pirates "^4.0.0" - source-map-support "^0.5.9" - -"@babel/runtime@^7.0.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d" - integrity sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" - integrity sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" - -"@babel/traverse@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" - integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/types" "^7.4.4" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" - -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" - integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== - dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" - -"@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@jest/console@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" - integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg== - dependencies: - "@jest/source-map" "^24.3.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/core@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.7.1.tgz#6707f50db238d0c5988860680e2e414df0032024" - integrity sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA== - dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.7.1" - "@jest/test-result" "^24.7.1" - "@jest/transform" "^24.7.1" - "@jest/types" "^24.7.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.7.0" - jest-config "^24.7.1" - jest-haste-map "^24.7.1" - jest-message-util "^24.7.1" - jest-regex-util "^24.3.0" - jest-resolve-dependencies "^24.7.1" - jest-runner "^24.7.1" - jest-runtime "^24.7.1" - jest-snapshot "^24.7.1" - jest-util "^24.7.1" - jest-validate "^24.7.0" - jest-watcher "^24.7.1" - micromatch "^3.1.10" - p-each-series "^1.0.0" - pirates "^4.0.1" - realpath-native "^1.1.0" - rimraf "^2.5.4" - strip-ansi "^5.0.0" - -"@jest/environment@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.7.1.tgz#9b9196bc737561f67ac07817d4c5ece772e33135" - integrity sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw== - dependencies: - "@jest/fake-timers" "^24.7.1" - "@jest/transform" "^24.7.1" - "@jest/types" "^24.7.0" - jest-mock "^24.7.0" - -"@jest/fake-timers@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.7.1.tgz#56e5d09bdec09ee81050eaff2794b26c71d19db2" - integrity sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA== - dependencies: - "@jest/types" "^24.7.0" - jest-message-util "^24.7.1" - jest-mock "^24.7.0" - -"@jest/reporters@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.7.1.tgz#38ac0b096cd691bbbe3051ddc25988d42e37773a" - integrity sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw== - dependencies: - "@jest/environment" "^24.7.1" - "@jest/test-result" "^24.7.1" - "@jest/transform" "^24.7.1" - "@jest/types" "^24.7.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - istanbul-api "^2.1.1" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-source-maps "^3.0.1" - jest-haste-map "^24.7.1" - jest-resolve "^24.7.1" - jest-runtime "^24.7.1" - jest-util "^24.7.1" - jest-worker "^24.6.0" - node-notifier "^5.2.1" - slash "^2.0.0" - source-map "^0.6.0" - string-length "^2.0.0" - -"@jest/source-map@^24.3.0": - version "24.3.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" - integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - -"@jest/test-result@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.7.1.tgz#19eacdb29a114300aed24db651e5d975f08b6bbe" - integrity sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg== - dependencies: - "@jest/console" "^24.7.1" - "@jest/types" "^24.7.0" - "@types/istanbul-lib-coverage" "^2.0.0" - -"@jest/test-sequencer@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz#9c18e428e1ad945fa74f6233a9d35745ca0e63e0" - integrity sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA== - dependencies: - "@jest/test-result" "^24.7.1" - jest-haste-map "^24.7.1" - jest-runner "^24.7.1" - jest-runtime "^24.7.1" - -"@jest/transform@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.7.1.tgz#872318f125bcfab2de11f53b465ab1aa780789c2" - integrity sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.7.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.7.1" - jest-regex-util "^24.3.0" - jest-util "^24.7.1" - micromatch "^3.1.10" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" - -"@jest/types@^24.7.0": - version "24.7.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.7.0.tgz#c4ec8d1828cdf23234d9b4ee31f5482a3f04f48b" - integrity sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/yargs" "^12.0.9" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== - dependencies: - any-observable "^0.3.0" - -"@types/babel__core@^7.1.0": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.1.tgz#ce9a9e5d92b7031421e1d0d74ae59f572ba48be6" - integrity sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" - integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== - dependencies: - "@babel/types" "^7.3.0" - -"@types/ip@^0.0.31": - version "0.0.31" - resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" - integrity sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== - -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== - -"@types/jest@^24.0.11": - version "24.0.11" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.11.tgz#1f099bea332c228ea6505a88159bfa86a5858340" - integrity sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ== - dependencies: - "@types/jest-diff" "*" - -"@types/jscodeshift@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@types/jscodeshift/-/jscodeshift-0.6.0.tgz#b3c59f9d2c863385dc91fee54fb98e1a54646e0c" - integrity sha512-LmkndrS2aed1H7+goMB9zxqpcL5zyObVZzR9uO8VmyPfyrf2NfVPZnOU9n3p2bIZ/6rW3alKldQpxatHVFz7Gw== - dependencies: - ast-types "0.12.1" - recast "0.17.2" - -"@types/lodash@^4.14.113": - version "4.14.123" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" - integrity sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q== - -"@types/node@*": - version "11.13.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.8.tgz#e5d71173c95533be9842b2c798978f095f912aab" - integrity sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg== - -"@types/node@^10.5.3": - version "10.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.6.tgz#9cbfcb62c50947217f4d88d4d274cc40c22625a9" - integrity sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": - version "12.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" - integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== - -abab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-globals@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" - integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-walk@^6.0.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" - integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== - -acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - -acorn@^6.0.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== - -ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-transform@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== - dependencies: - default-require-extensions "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types@0.11.7: - version "0.11.7" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" - integrity sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw== - -ast-types@0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.12.1.tgz#55d3737a8a68e1ccde131067005ce7ee3dd42b99" - integrity sha512-H2izJAyT2xwew4TxShpmxe6f9R5hHgJQy1QloLiUC2yrJMtyraBWNJL7903rpeCY9keNUipORR/zIUC2XcYKng== - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - -async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -babel-core@^7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-jest@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" - integrity sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg== - dependencies: - "@jest/transform" "^24.7.1" - "@jest/types" "^24.7.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.6.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-plugin-istanbul@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.3.tgz#202d20ffc96a821c68a3964412de75b9bdeb48c7" - integrity sha512-IFyehbvRRwdBlI1lDp+FaMsWNnEndEk7065IB8NhzBX+ZKLPwPodgk4I5Gobw/8SNUUzso2Dv3hbqRh88eiSCQ== - dependencies: - find-up "^3.0.0" - istanbul-lib-instrument "^3.2.0" - test-exclude "^5.2.2" - -babel-plugin-jest-hoist@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" - integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== - dependencies: - "@types/babel__traverse" "^7.0.6" - -babel-preset-jest@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" - integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== - dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.6.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserslist@^4.6.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.2.tgz#574c665950915c2ac73a4594b8537a9eba26203f" - integrity sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q== - dependencies: - caniuse-lite "^1.0.30000974" - electron-to-chromium "^1.3.150" - node-releases "^1.1.23" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= - dependencies: - node-int64 "^0.4.0" - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30000974: - version "1.0.30000974" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8" - integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -colors@^1.1.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-versions@^3.2.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" - integrity sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -convert-source-map@^1.1.0, convert-source-map@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.3.tgz#0cc3ba4c7f62928c2837e1cffbe8dc78b4f1ae14" - integrity sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA== - dependencies: - browserslist "^4.6.0" - core-js-pure "3.1.3" - semver "^6.1.0" - -core-js-pure@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.3.tgz#4c90752d5b9471f641514f3728f51c1e0783d0b5" - integrity sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA== - -core-js@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.3.tgz#95700bca5f248f5f78c0ec63e784eca663ec4138" - integrity sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -coveralls@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.3.tgz#83b1c64aea1c6afa69beaf50b55ac1bc4d13e2b8" - integrity sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg== - dependencies: - growl "~> 1.10.0" - js-yaml "^3.11.0" - lcov-parse "^0.0.10" - log-driver "^1.2.7" - minimist "^1.2.0" - request "^2.86.0" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.6" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" - integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== - -cssstyle@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077" - integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow== - dependencies: - cssom "0.3.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= - dependencies: - strip-bom "^3.0.0" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= - -diff-sequences@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" - integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-to-chromium@^1.3.150: - version "1.3.159" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.159.tgz#4292643c5cb77678821ce01557ba6dd0f562db5e" - integrity sha512-bhiEr8/A97GUBcUzNb9MFNhzQOjakbKmEKBEAa6UMY45zG2e8PM63LOgAPXEJE9bQiaQH6nOdYiYf8X821tZjQ== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.5.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^1.9.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" - integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.7.1.tgz#d91defbab4e627470a152feaf35b3c31aa1c7c14" - integrity sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw== - dependencies: - "@jest/types" "^24.7.0" - ansi-styles "^3.2.0" - jest-get-type "^24.3.0" - jest-matcher-utils "^24.7.0" - jest-message-util "^24.7.1" - jest-regex-util "^24.3.0" - -expression-eval@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/expression-eval/-/expression-eval-2.0.0.tgz#156bc71a700b0c7797f47d8a7167ce4fba5c060c" - integrity sha512-8cFzfco37CdZQd4DTyZ+ncxQtPUTE0dcxvbGXYc17Ji+3MQSBkT+11GdfC7eO2duvLNuWjN7Ejqb0kLX/u2bBw== - dependencies: - jsep "^0.3.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= - dependencies: - bser "^2.0.0" - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -fileset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a" - integrity sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q== - dependencies: - locate-path "^5.0.0" - -flow-parser@0.*: - version "0.101.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.101.0.tgz#9d355cd749ef526e99aecb3b195980e2567ab07c" - integrity sha512-Goi71MNzZkL530ZEEpedxLlFFiCA/M4J+nJA8zHSTSpHnDCL3WYpr2NYFHmUczpG80Hq9xTYdQYfGQEk7Dl5Ww== - -fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== - dependencies: - minipass "^2.2.1" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.8.tgz#57ea5320f762cd4696e5e8e87120eccc8b11cacf" - integrity sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== - -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" - integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -"growl@~> 1.10.0": - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -handlebars@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -husky@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-2.3.0.tgz#8b78ed24d763042df7fd899991985d65a976dd13" - integrity sha512-A/ZQSEILoq+mQM3yC3RIBSaw1bYXdkKnyyKVSUiJl+iBjVZc5LQEXdGY1ZjrDxC4IzfRPiJ0IqzEQGCN5TQa/A== - dependencies: - cosmiconfig "^5.2.0" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^7.0.0" - is-ci "^2.0.0" - pkg-dir "^4.1.0" - please-upgrade-node "^3.1.1" - read-pkg "^5.1.1" - run-node "^1.0.0" - slash "^3.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-api@^2.1.1: - version "2.1.5" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.5.tgz#697b95ec69856c278aacafc0f86ee7392338d5b5" - integrity sha512-meYk1BwDp59Pfse1TvPrkKYgVqAufbdBLEVoqvu/hLLKSaQ054ZTksbNepyc223tMnWdm6AdK2URIJJRqdP87g== - dependencies: - async "^2.6.1" - compare-versions "^3.2.1" - fileset "^2.0.3" - istanbul-lib-coverage "^2.0.4" - istanbul-lib-hook "^2.0.6" - istanbul-lib-instrument "^3.2.0" - istanbul-lib-report "^2.0.7" - istanbul-lib-source-maps "^3.0.5" - istanbul-reports "^2.2.3" - js-yaml "^3.13.0" - make-dir "^2.1.0" - minimatch "^3.0.4" - once "^1.4.0" - -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#927a354005d99dd43a24607bb8b33fd4e9aca1ad" - integrity sha512-LXTBICkMARVgo579kWDm8SqfB6nvSDKNqIOBEjmJRnL04JvoMHCYGWaMddQnseJYtkEuEvO/sIcOxPLk9gERug== - -istanbul-lib-hook@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.6.tgz#5baa6067860a38290aef038b389068b225b01b7d" - integrity sha512-829DKONApZ7UCiPXcOYWSgkFXa4+vNYoNOt3F+4uDJLKL1OotAoVwvThoEj1i8jmOj7odbYcR3rnaHu+QroaXg== - dependencies: - append-transform "^1.0.0" - -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.2.0.tgz#c549208da8a793f6622257a2da83e0ea96ae6a93" - integrity sha512-06IM3xShbNW4NgZv5AP4QH0oHqf1/ivFo8eFys0ZjPXHGldHJQWb3riYOKXqmOqfxXBfxu4B+g/iuhOPZH0RJg== - dependencies: - "@babel/generator" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - istanbul-lib-coverage "^2.0.4" - semver "^6.0.0" - -istanbul-lib-report@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.7.tgz#370d80d433c4dbc7f58de63618f49599c74bd954" - integrity sha512-wLH6beJBFbRBLiTlMOBxmb85cnVM1Vyl36N48e4e/aTKSM3WbOx7zbVIH1SQ537fhhsPbX0/C5JB4qsmyRXXyA== - dependencies: - istanbul-lib-coverage "^2.0.4" - make-dir "^2.1.0" - supports-color "^6.0.0" - -istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.5.tgz#1d9ee9d94d2633f15611ee7aae28f9cac6d1aeb9" - integrity sha512-eDhZ7r6r1d1zQPVZehLc3D0K14vRba/eBYkz3rw16DLOrrTzve9RmnkcwrrkWVgO1FL3EK5knujVe5S8QHE9xw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^2.0.4" - make-dir "^2.1.0" - rimraf "^2.6.2" - source-map "^0.6.1" - -istanbul-reports@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.3.tgz#14e0d00ecbfa9387757999cf36599b88e9f2176e" - integrity sha512-T6EbPuc8Cb620LWAYyZ4D8SSn06dY9i1+IgUX2lTH8gbwflMc9Obd33zHTyNX653ybjpamAHS9toKS3E6cGhTw== - dependencies: - handlebars "^4.1.0" - -jest-changed-files@^24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.7.0.tgz#39d723a11b16ed7b373ac83adc76a69464b0c4fa" - integrity sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw== - dependencies: - "@jest/types" "^24.7.0" - execa "^1.0.0" - throat "^4.0.0" - -jest-cli@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.7.1.tgz#6093a539073b6f4953145abeeb9709cd621044f1" - integrity sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ== - dependencies: - "@jest/core" "^24.7.1" - "@jest/test-result" "^24.7.1" - "@jest/types" "^24.7.0" - chalk "^2.0.1" - exit "^0.1.2" - import-local "^2.0.0" - is-ci "^2.0.0" - jest-config "^24.7.1" - jest-util "^24.7.1" - jest-validate "^24.7.0" - prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^12.0.2" - -jest-config@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.7.1.tgz#6c1dd4db82a89710a3cf66bdba97827c9a1cf052" - integrity sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.7.1" - "@jest/types" "^24.7.0" - babel-jest "^24.7.1" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^24.7.1" - jest-environment-node "^24.7.1" - jest-get-type "^24.3.0" - jest-jasmine2 "^24.7.1" - jest-regex-util "^24.3.0" - jest-resolve "^24.7.1" - jest-util "^24.7.1" - jest-validate "^24.7.0" - micromatch "^3.1.10" - pretty-format "^24.7.0" - realpath-native "^1.1.0" - -jest-diff@^24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.7.0.tgz#5d862899be46249754806f66e5729c07fcb3580f" - integrity sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.3.0" - jest-get-type "^24.3.0" - pretty-format "^24.7.0" - -jest-docblock@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" - integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== - dependencies: - detect-newline "^2.1.0" - -jest-each@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.7.1.tgz#fcc7dda4147c28430ad9fb6dc7211cd17ab54e74" - integrity sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA== - dependencies: - "@jest/types" "^24.7.0" - chalk "^2.0.1" - jest-get-type "^24.3.0" - jest-util "^24.7.1" - pretty-format "^24.7.0" - -jest-environment-jsdom@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz#a40e004b4458ebeb8a98082df135fd501b9fbbd6" - integrity sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg== - dependencies: - "@jest/environment" "^24.7.1" - "@jest/fake-timers" "^24.7.1" - "@jest/types" "^24.7.0" - jest-mock "^24.7.0" - jest-util "^24.7.1" - jsdom "^11.5.1" - -jest-environment-node@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.7.1.tgz#fa2c047a31522a48038d26ee4f7c8fd9c1ecfe12" - integrity sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA== - dependencies: - "@jest/environment" "^24.7.1" - "@jest/fake-timers" "^24.7.1" - "@jest/types" "^24.7.0" - jest-mock "^24.7.0" - jest-util "^24.7.1" - -jest-get-type@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" - integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow== - -jest-haste-map@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.7.1.tgz#772e215cd84080d4bbcb759cfb668ad649a21471" - integrity sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw== - dependencies: - "@jest/types" "^24.7.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.4.0" - jest-util "^24.7.1" - jest-worker "^24.6.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" - -jest-jasmine2@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz#01398686dabe46553716303993f3be62e5d9d818" - integrity sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.7.1" - "@jest/test-result" "^24.7.1" - "@jest/types" "^24.7.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^24.7.1" - is-generator-fn "^2.0.0" - jest-each "^24.7.1" - jest-matcher-utils "^24.7.0" - jest-message-util "^24.7.1" - jest-runtime "^24.7.1" - jest-snapshot "^24.7.1" - jest-util "^24.7.1" - pretty-format "^24.7.0" - throat "^4.0.0" - -jest-leak-detector@^24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz#323ff93ed69be12e898f5b040952f08a94288ff9" - integrity sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ== - dependencies: - pretty-format "^24.7.0" - -jest-matcher-utils@^24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz#bbee1ff37bc8b2e4afcaabc91617c1526af4bcd4" - integrity sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg== - dependencies: - chalk "^2.0.1" - jest-diff "^24.7.0" - jest-get-type "^24.3.0" - pretty-format "^24.7.0" - -jest-message-util@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.7.1.tgz#f1dc3a6c195647096a99d0f1dadbc447ae547018" - integrity sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.7.1" - "@jest/types" "^24.7.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" - -jest-mock@^24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.7.0.tgz#e49ce7262c12d7f5897b0d8af77f6db8e538023b" - integrity sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng== - dependencies: - "@jest/types" "^24.7.0" - -jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== - -jest-regex-util@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" - integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== - -jest-resolve-dependencies@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz#cf93bbef26999488a96a2b2012f9fe7375aa378f" - integrity sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg== - dependencies: - "@jest/types" "^24.7.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.7.1" - -jest-resolve@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.7.1.tgz#e4150198299298380a75a9fd55043fa3b9b17fde" - integrity sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw== - dependencies: - "@jest/types" "^24.7.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.7.1.tgz#41c8a02a06aa23ea82d8bffd69d7fa98d32f85bf" - integrity sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.7.1" - "@jest/test-result" "^24.7.1" - "@jest/types" "^24.7.0" - chalk "^2.4.2" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.7.1" - jest-docblock "^24.3.0" - jest-haste-map "^24.7.1" - jest-jasmine2 "^24.7.1" - jest-leak-detector "^24.7.0" - jest-message-util "^24.7.1" - jest-resolve "^24.7.1" - jest-runtime "^24.7.1" - jest-util "^24.7.1" - jest-worker "^24.6.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.7.1.tgz#2ffd70b22dd03a5988c0ab9465c85cdf5d25c597" - integrity sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.7.1" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.7.1" - "@jest/types" "^24.7.0" - "@types/yargs" "^12.0.2" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.7.1" - jest-haste-map "^24.7.1" - jest-message-util "^24.7.1" - jest-mock "^24.7.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.7.1" - jest-snapshot "^24.7.1" - jest-util "^24.7.1" - jest-validate "^24.7.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^12.0.2" - -jest-serializer@^24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" - integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== - -jest-snapshot@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.7.1.tgz#bd5a35f74aedff070975e9e9c90024f082099568" - integrity sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^24.7.0" - chalk "^2.0.1" - expect "^24.7.1" - jest-diff "^24.7.0" - jest-matcher-utils "^24.7.0" - jest-message-util "^24.7.1" - jest-resolve "^24.7.1" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^24.7.0" - semver "^5.5.0" - -jest-util@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.7.1.tgz#b4043df57b32a23be27c75a2763d8faf242038ff" - integrity sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A== - dependencies: - "@jest/console" "^24.7.1" - "@jest/fake-timers" "^24.7.1" - "@jest/source-map" "^24.3.0" - "@jest/test-result" "^24.7.1" - "@jest/types" "^24.7.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" - -jest-validate@^24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.7.0.tgz#70007076f338528ee1b1c8a8258b1b0bb982508d" - integrity sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA== - dependencies: - "@jest/types" "^24.7.0" - camelcase "^5.0.0" - chalk "^2.0.1" - jest-get-type "^24.3.0" - leven "^2.1.0" - pretty-format "^24.7.0" - -jest-watcher@^24.7.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.7.1.tgz#e161363d7f3f4e1ef3d389b7b3a0aad247b673f5" - integrity sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw== - dependencies: - "@jest/test-result" "^24.7.1" - "@jest/types" "^24.7.0" - "@types/yargs" "^12.0.9" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.7.1" - string-length "^2.0.0" - -jest-worker@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" - integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== - dependencies: - merge-stream "^1.0.1" - supports-color "^6.1.0" - -jest@^24.3.1: - version "24.7.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.7.1.tgz#0d94331cf510c75893ee32f87d7321d5bf8f2501" - integrity sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA== - dependencies: - import-local "^2.0.0" - jest-cli "^24.7.1" - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.11.0, js-yaml@^3.13.0, js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jscodeshift@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.6.4.tgz#e19ab86214edac86a75c4557fc88b3937d558a8e" - integrity sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ== - dependencies: - "@babel/core" "^7.1.6" - "@babel/parser" "^7.1.6" - "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/preset-env" "^7.1.6" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-typescript" "^7.1.0" - "@babel/register" "^7.0.0" - babel-core "^7.0.0-bridge.0" - colors "^1.1.2" - flow-parser "0.*" - graceful-fs "^4.1.11" - micromatch "^3.1.10" - neo-async "^2.5.0" - node-dir "^0.1.17" - recast "^0.16.1" - temp "^0.8.1" - write-file-atomic "^2.3.0" - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsep@^0.3.0: - version "0.3.4" - resolved "https://registry.yarnpkg.com/jsep/-/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" - integrity sha512-ovGD9wE+wvudIIYxZGrRcZCxNyZ3Cl1N7Bzyp7/j4d/tA0BaUwcVM9bu0oZaSrefMiNwv6TwZ9X15gvZosteCQ== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== - dependencies: - minimist "^1.2.0" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -kleur@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -lcov-parse@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^8.1.7: - version "8.1.7" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.7.tgz#a8988bc83bdffa97d04adb09dbc0b1f3a58fa6fc" - integrity sha512-egT0goFhIFoOGk6rasPngTFh2qDqxZddM0PwI58oi66RxCDcn5uDwxmiasWIF0qGnchHSYVJ8HPRD5LrFo7TKA== - dependencies: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.2.0" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - find-parent-dir "^0.3.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - listr "^0.14.2" - listr-update-renderer "^0.5.0" - lodash "^4.17.11" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - yup "^0.27.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash@^4.17.10, lodash@^4.17.11: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== - -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-error@1.x: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== - dependencies: - escape-string-regexp "^1.0.4" - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -nan@^2.12.1: - version "2.13.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" - integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -needle@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388" - integrity sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg== - dependencies: - debug "^4.1.0" - iconv-lite "^0.4.4" - sax "^1.2.4" - -neo-async@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -neo-async@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-dir@^0.1.17: - version "0.1.17" - resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" - integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= - dependencies: - minimatch "^3.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^5.2.1: - version "5.4.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" - integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.23: - version "1.1.23" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0" - integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w== - dependencies: - semver "^5.3.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.0.7: - version "2.1.3" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.3.tgz#25f3a5cec26c654f7376df6659cdf84b99df9558" - integrity sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.0, pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== - dependencies: - semver-compare "^1.0.0" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.1.tgz#ed64b4e93e370cb8a25b9ef7fef3e4fd1c0995db" - integrity sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg== - -pretty-format@^24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.7.0.tgz#d23106bc2edcd776079c2daa5da02bcb12ed0c10" - integrity sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA== - dependencies: - "@jest/types" "^24.7.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - -private@^0.1.6, private@~0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== - -prompts@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" - integrity sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA== - dependencies: - kleur "^3.0.2" - sisteransi "^1.0.0" - -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== - -psl@^1.1.24, psl@^1.1.28: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-is@^16.8.4: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== - -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" - integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^4.0.0" - type-fest "^0.4.1" - -readable-stream@^2.0.1, readable-stream@^2.0.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== - dependencies: - util.promisify "^1.0.0" - -recast@0.17.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.17.2.tgz#f18f18cf20bf3fad4522621a7f9c2ada37276814" - integrity sha512-YHFvn4rBXl8eIjALjUiOV/AP3xFpyGNGNHDw9mAncAWuIdgnBKjbZQ9+P3VlsKcNaNapRVFlTEX1dvDRlYwyxg== - dependencies: - ast-types "0.12.1" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - -recast@^0.16.1: - version "0.16.2" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2" - integrity sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A== - dependencies: - ast-types "0.11.7" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - -regenerate-unicode-properties@^8.0.2: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" - integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== - -regenerator-transform@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" - integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== - dependencies: - private "^0.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp-tree@^0.1.6: - version "0.1.10" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" - integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== - -regexpu-core@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" - integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.2" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== - dependencies: - lodash "^4.17.11" - -request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== - dependencies: - request-promise-core "1.1.2" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.86.0, request@^2.87.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: - version "1.10.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" - integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= - -rsvp@^4.8.4: - version "4.8.4" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" - integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== - -rxjs@^6.3.3: - version "6.5.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" - integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -semver@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" - integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== - -semver@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" - integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-git@^1.85.0: - version "1.113.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.113.0.tgz#668989728a1e9cf4ec6c72b69ea2eecc93489bea" - integrity sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g== - dependencies: - debug "^4.0.1" - -sisteransi@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" - integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6, source-map-support@^0.5.9: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" - integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.0.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= - -synchronous-promise@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.8.tgz#01fd026fffdbf2d3d39ec06ee1a7c971578136f7" - integrity sha512-xYavZtFC1vKgJu0AOSYdrLeikNCsNwmUeZaV1XF9cMqEhBVVxLq6rEbYzOGrF1MV2MNPkhsJqqiXuQ4a76CEUg== - -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -temp@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - -test-exclude@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.2.tgz#7322f8ab037b0b93ad2aab35fe9068baf997a4c4" - integrity sha512-N2pvaLpT8guUpb5Fe1GJlmvmzH3x+DAKmmyEQmFP792QcLYoGE1syxztSvPD1V8yPe6VrcCt6YGQVjSRjCASsA== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= - -tough-cookie@^2.3.3, tough-cookie@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -ts-jest@^24.0.0: - version "24.0.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" - integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "10.x" - -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== - -tslint@^5.11.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.16.0.tgz#ae61f9c5a98d295b9a4f4553b1b1e831c1984d67" - integrity sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.13.0" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -typescript@^3.4.5: - version "3.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" - integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw== - -uglify-js@^3.1.4: - version "3.5.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.9.tgz#372fbf95939555b1f460b1777d33a67d4a994ac9" - integrity sha512-WpT0RqsDtAWPNJK955DEnb6xjymR8Fn0OlK4TT4pS0ASYsVPqr5ELhgwOwLCP5J5vHeJ4xmMmz3DEgdqC10JeQ== - dependencies: - commander "~2.20.0" - source-map "~0.6.1" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= - dependencies: - browser-process-hrtime "^0.1.2" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.10, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^2.3.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -"y18n@^3.2.1 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - -yargs-parser@10.x: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^12.0.2: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -yup@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.0.tgz#6ed6a2881ad48a732c5433096d96d1b0ee5eb734" + integrity sha512-6Isr4X98pwXqHvtigw71CKgmhL1etZjPs5A67jL/w0TkLM9eqmFR40YrnJvEc1WnMZFsskjsmid8bHZyxKEAnw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.5.0" + "@babel/helpers" "^7.5.0" + "@babel/parser" "^7.5.0" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.5.0" + "@babel/types" "^7.5.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.4.0", "@babel/generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.0.tgz#f20e4b7a91750ee8b63656073d843d2a736dca4a" + integrity sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA== + dependencies: + "@babel/types" "^7.5.0" + jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helpers@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.0.tgz#7f0c17666e7ed8355ed6eff643dde12fb681ddb4" + integrity sha512-EgCUEa8cNwuMrwo87l2d7i2oShi8m2Q58H7h3t4TWtqATZalJYFwfL9DulRe02f3KdqM9xmMCw3v/7Ll+EiaWg== + dependencies: + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.5.0" + "@babel/types" "^7.5.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.0.tgz#3e0713dff89ad6ae37faec3b29dcfc5c979770b7" + integrity sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA== + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/runtime@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.0.tgz#49dcbcd637099a55d3a61e590a00d6861393b1b5" + integrity sha512-2xsuyZ0R0RBFwjgae5NpXk8FcfH4qovj5cEM5VEeB7KXnKqzaisIu2HSV/mCEISolJJuR4wkViUGYujA8MH9tw== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485" + integrity sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.5.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.5.0" + "@babel/types" "^7.5.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab" + integrity sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@jest/console@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" + integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg== + dependencies: + "@jest/source-map" "^24.3.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.8.0.tgz#fbbdcd42a41d0d39cddbc9f520c8bab0c33eed5b" + integrity sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.8.0" + "@jest/test-result" "^24.8.0" + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.8.0" + jest-config "^24.8.0" + jest-haste-map "^24.8.0" + jest-message-util "^24.8.0" + jest-regex-util "^24.3.0" + jest-resolve-dependencies "^24.8.0" + jest-runner "^24.8.0" + jest-runtime "^24.8.0" + jest-snapshot "^24.8.0" + jest-util "^24.8.0" + jest-validate "^24.8.0" + jest-watcher "^24.8.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + pirates "^4.0.1" + realpath-native "^1.1.0" + rimraf "^2.5.4" + strip-ansi "^5.0.0" + +"@jest/environment@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.8.0.tgz#0342261383c776bdd652168f68065ef144af0eac" + integrity sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw== + dependencies: + "@jest/fake-timers" "^24.8.0" + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + jest-mock "^24.8.0" + +"@jest/fake-timers@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1" + integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw== + dependencies: + "@jest/types" "^24.8.0" + jest-message-util "^24.8.0" + jest-mock "^24.8.0" + +"@jest/reporters@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.8.0.tgz#075169cd029bddec54b8f2c0fc489fd0b9e05729" + integrity sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw== + dependencies: + "@jest/environment" "^24.8.0" + "@jest/test-result" "^24.8.0" + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.1" + istanbul-reports "^2.1.1" + jest-haste-map "^24.8.0" + jest-resolve "^24.8.0" + jest-runtime "^24.8.0" + jest-util "^24.8.0" + jest-worker "^24.6.0" + node-notifier "^5.2.1" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" + integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3" + integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng== + dependencies: + "@jest/console" "^24.7.1" + "@jest/types" "^24.8.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz#2f993bcf6ef5eb4e65e8233a95a3320248cf994b" + integrity sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg== + dependencies: + "@jest/test-result" "^24.8.0" + jest-haste-map "^24.8.0" + jest-runner "^24.8.0" + jest-runtime "^24.8.0" + +"@jest/transform@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5" + integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.8.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.8.0" + jest-regex-util "^24.3.0" + jest-util "^24.8.0" + micromatch "^3.1.10" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad" + integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^12.0.9" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== + dependencies: + any-observable "^0.3.0" + +"@types/babel__core@^7.1.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f" + integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" + integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" + integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/ip@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" + integrity sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-report@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" + integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest-diff@*": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" + integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== + +"@types/jest@^24.0.11": + version "24.0.15" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.15.tgz#6c42d5af7fe3b44ffff7cc65de7bf741e8fa427f" + integrity sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA== + dependencies: + "@types/jest-diff" "*" + +"@types/lodash@^4.14.113": + version "4.14.135" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" + integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== + +"@types/node@*": + version "12.0.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.12.tgz#cc791b402360db1eaf7176479072f91ee6c6c7ca" + integrity sha512-Uy0PN4R5vgBUXFoJrKryf5aTk3kJ8Rv3PdlHjl6UaX+Cqp1QE0yPQ68MPXGrZOfG7gZVNDIJZYyot0B9ubXUrQ== + +"@types/node@^10.5.3": + version "10.14.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.12.tgz#0eec3155a46e6c4db1f27c3e588a205f767d622f" + integrity sha512-QcAKpaO6nhHLlxWBvpc4WeLrTvPqlHOvaj0s5GriKkA1zq+bsFBPpfYCvQhLqLgYlIko8A9YrPdaMHCo5mBcpg== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": + version "12.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" + integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== + +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-globals@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" + integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" + integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== + +ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-jest@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589" + integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw== + dependencies: + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.6.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-plugin-istanbul@^5.1.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz#841d16b9a58eeb407a0ddce622ba02fe87a752ba" + integrity sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ== + dependencies: + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" + +babel-plugin-jest-hoist@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" + integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-preset-jest@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" + integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.6.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" + integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== + dependencies: + node-int64 "^0.4.0" + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chownr@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +coveralls@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.4.tgz#f50233c9c62fd0973f710fce85fd19dba24cff4b" + integrity sha512-eyqUWA/7RT0JagiL0tThVhjbIjoiEUyWCjtUJoOPcWoeofP5WK/jb2OJYoBFrR6DvplR+AxOyuBqk4JHkk5ykA== + dependencies: + growl "~> 1.10.0" + js-yaml "^3.11.0" + lcov-parse "^0.0.10" + log-driver "^1.2.7" + minimist "^1.2.0" + request "^2.86.0" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +"cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.3.0.tgz#c36c466f7037fd30f03baa271b65f0f17b50585c" + integrity sha512-wXsoRfsRfsLVNaVzoKdqvEmK/5PFaEXNspVT22Ots6K/cnJdpoDKuQFw+qlMiXnmaif1OgeC466X1zISgAOcGg== + dependencies: + cssom "~0.3.6" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +diff-sequences@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" + integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== + +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.5.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.9.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" + integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d" + integrity sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA== + dependencies: + "@jest/types" "^24.8.0" + ansi-styles "^3.2.0" + jest-get-type "^24.8.0" + jest-matcher-utils "^24.8.0" + jest-message-util "^24.8.0" + jest-regex-util "^24.3.0" + +expression-eval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/expression-eval/-/expression-eval-2.0.0.tgz#156bc71a700b0c7797f47d8a7167ce4fba5c060c" + integrity sha512-8cFzfco37CdZQd4DTyZ+ncxQtPUTE0dcxvbGXYc17Ji+3MQSBkT+11GdfC7eO2duvLNuWjN7Ejqb0kLX/u2bBw== + dependencies: + jsep "^0.3.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + dependencies: + bser "^2.0.0" + +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fn-name@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" + integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-minipass@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +g-status@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" + integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== + dependencies: + arrify "^1.0.1" + matcher "^1.0.0" + simple-git "^1.85.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" + integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== + +"growl@~> 1.10.0": + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handlebars@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +husky@^2.3.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/husky/-/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05" + integrity sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg== + dependencies: + cosmiconfig "^5.2.0" + execa "^1.0.0" + find-up "^3.0.0" + get-stdin "^7.0.0" + is-ci "^2.0.0" + pkg-dir "^4.1.0" + please-upgrade-node "^3.1.1" + read-pkg "^5.1.1" + run-node "^1.0.0" + slash "^3.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.4: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.1.1: + version "2.2.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + dependencies: + handlebars "^4.1.2" + +jest-changed-files@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b" + integrity sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug== + dependencies: + "@jest/types" "^24.8.0" + execa "^1.0.0" + throat "^4.0.0" + +jest-cli@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.8.0.tgz#b075ac914492ed114fa338ade7362a301693e989" + integrity sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA== + dependencies: + "@jest/core" "^24.8.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + chalk "^2.0.1" + exit "^0.1.2" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.8.0" + jest-util "^24.8.0" + jest-validate "^24.8.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^12.0.2" + +jest-config@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.8.0.tgz#77db3d265a6f726294687cbbccc36f8a76ee0f4f" + integrity sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.8.0" + "@jest/types" "^24.8.0" + babel-jest "^24.8.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.8.0" + jest-environment-node "^24.8.0" + jest-get-type "^24.8.0" + jest-jasmine2 "^24.8.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.8.0" + jest-util "^24.8.0" + jest-validate "^24.8.0" + micromatch "^3.1.10" + pretty-format "^24.8.0" + realpath-native "^1.1.0" + +jest-diff@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172" + integrity sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.3.0" + jest-get-type "^24.8.0" + pretty-format "^24.8.0" + +jest-docblock@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" + integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== + dependencies: + detect-newline "^2.1.0" + +jest-each@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.8.0.tgz#a05fd2bf94ddc0b1da66c6d13ec2457f35e52775" + integrity sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA== + dependencies: + "@jest/types" "^24.8.0" + chalk "^2.0.1" + jest-get-type "^24.8.0" + jest-util "^24.8.0" + pretty-format "^24.8.0" + +jest-environment-jsdom@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz#300f6949a146cabe1c9357ad9e9ecf9f43f38857" + integrity sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ== + dependencies: + "@jest/environment" "^24.8.0" + "@jest/fake-timers" "^24.8.0" + "@jest/types" "^24.8.0" + jest-mock "^24.8.0" + jest-util "^24.8.0" + jsdom "^11.5.1" + +jest-environment-node@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.8.0.tgz#d3f726ba8bc53087a60e7a84ca08883a4c892231" + integrity sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q== + dependencies: + "@jest/environment" "^24.8.0" + "@jest/fake-timers" "^24.8.0" + "@jest/types" "^24.8.0" + jest-mock "^24.8.0" + jest-util "^24.8.0" + +jest-get-type@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc" + integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ== + +jest-haste-map@^24.8.0: + version "24.8.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.1.tgz#f39cc1d2b1d907e014165b4bd5a957afcb992982" + integrity sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g== + dependencies: + "@jest/types" "^24.8.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.4.0" + jest-util "^24.8.0" + jest-worker "^24.6.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz#a9c7e14c83dd77d8b15e820549ce8987cc8cd898" + integrity sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.8.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.8.0" + is-generator-fn "^2.0.0" + jest-each "^24.8.0" + jest-matcher-utils "^24.8.0" + jest-message-util "^24.8.0" + jest-runtime "^24.8.0" + jest-snapshot "^24.8.0" + jest-util "^24.8.0" + pretty-format "^24.8.0" + throat "^4.0.0" + +jest-leak-detector@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz#c0086384e1f650c2d8348095df769f29b48e6980" + integrity sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g== + dependencies: + pretty-format "^24.8.0" + +jest-matcher-utils@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495" + integrity sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw== + dependencies: + chalk "^2.0.1" + jest-diff "^24.8.0" + jest-get-type "^24.8.0" + pretty-format "^24.8.0" + +jest-message-util@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b" + integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56" + integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A== + dependencies: + "@jest/types" "^24.8.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" + integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== + +jest-resolve-dependencies@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz#19eec3241f2045d3f990dba331d0d7526acff8e0" + integrity sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw== + dependencies: + "@jest/types" "^24.8.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.8.0" + +jest-resolve@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.8.0.tgz#84b8e5408c1f6a11539793e2b5feb1b6e722439f" + integrity sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw== + dependencies: + "@jest/types" "^24.8.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.8.0.tgz#4f9ae07b767db27b740d7deffad0cf67ccb4c5bb" + integrity sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.8.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + chalk "^2.4.2" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-config "^24.8.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.8.0" + jest-jasmine2 "^24.8.0" + jest-leak-detector "^24.8.0" + jest-message-util "^24.8.0" + jest-resolve "^24.8.0" + jest-runtime "^24.8.0" + jest-util "^24.8.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.8.0.tgz#05f94d5b05c21f6dc54e427cd2e4980923350620" + integrity sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.8.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + "@types/yargs" "^12.0.2" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.8.0" + jest-haste-map "^24.8.0" + jest-message-util "^24.8.0" + jest-mock "^24.8.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.8.0" + jest-snapshot "^24.8.0" + jest-util "^24.8.0" + jest-validate "^24.8.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^12.0.2" + +jest-serializer@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" + integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== + +jest-snapshot@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.8.0.tgz#3bec6a59da2ff7bc7d097a853fb67f9d415cb7c6" + integrity sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.8.0" + chalk "^2.0.1" + expect "^24.8.0" + jest-diff "^24.8.0" + jest-matcher-utils "^24.8.0" + jest-message-util "^24.8.0" + jest-resolve "^24.8.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^24.8.0" + semver "^5.5.0" + +jest-util@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1" + integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA== + dependencies: + "@jest/console" "^24.7.1" + "@jest/fake-timers" "^24.8.0" + "@jest/source-map" "^24.3.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849" + integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA== + dependencies: + "@jest/types" "^24.8.0" + camelcase "^5.0.0" + chalk "^2.0.1" + jest-get-type "^24.8.0" + leven "^2.1.0" + pretty-format "^24.8.0" + +jest-watcher@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.8.0.tgz#58d49915ceddd2de85e238f6213cef1c93715de4" + integrity sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw== + dependencies: + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + "@types/yargs" "^12.0.9" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.8.0" + string-length "^2.0.0" + +jest-worker@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" + integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== + dependencies: + merge-stream "^1.0.1" + supports-color "^6.1.0" + +jest@^24.3.1: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.8.0.tgz#d5dff1984d0d1002196e9b7f12f75af1b2809081" + integrity sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg== + dependencies: + import-local "^2.0.0" + jest-cli "^24.8.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.11.0, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsep@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/jsep/-/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" + integrity sha512-ovGD9wE+wvudIIYxZGrRcZCxNyZ3Cl1N7Bzyp7/j4d/tA0BaUwcVM9bu0oZaSrefMiNwv6TwZ9X15gvZosteCQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@2.x, json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +kleur@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +lcov-parse@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lint-staged@^8.1.7: + version "8.2.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" + integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A== + dependencies: + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.2.0" + debug "^3.1.0" + dedent "^0.7.0" + del "^3.0.0" + execa "^1.0.0" + g-status "^2.0.2" + is-glob "^4.0.0" + is-windows "^1.0.2" + listr "^0.14.2" + listr-update-renderer "^0.5.0" + lodash "^4.17.11" + log-symbols "^2.2.0" + micromatch "^3.1.8" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.2" + string-argv "^0.0.2" + stringify-object "^3.2.2" + yup "^0.27.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr@^0.14.2: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@^4.17.10, lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@1.x: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +matcher@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" + integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== + dependencies: + escape-string-regexp "^1.0.4" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^5.2.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" + integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ== + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.0.7: + version "2.1.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" + integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" + integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== + dependencies: + semver-compare "^1.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@^1.17.1: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + +pretty-format@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2" + integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw== + dependencies: + "@jest/types" "^24.8.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +prompts@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db" + integrity sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg== + dependencies: + kleur "^3.0.2" + sisteransi "^1.0.0" + +property-expr@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" + integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== + +psl@^1.1.24, psl@^1.1.28: + version "1.2.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" + integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^16.8.4: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" + integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^4.0.0" + type-fest "^0.4.1" + +readable-stream@^2.0.1, readable-stream@^2.0.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== + dependencies: + lodash "^4.17.11" + +request-promise-native@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + dependencies: + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.86.0, request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" + integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== + +rxjs@^6.3.3: + version "6.5.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" + integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" + integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-git@^1.85.0: + version "1.118.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.118.0.tgz#6e31d50672c58abdbdb0410fadfdb1db29bd71bd" + integrity sha512-0CaCfxdR7ula3EuOkrVFKBiqt7LcvMPfXgIdUhSwjC4A+OaO8yEPGjdO/kWY7ew9uYP9KEoH+dvslOOm7eVzkA== + dependencies: + debug "^4.0.1" + +sisteransi@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.2.tgz#ec57d64b6f25c4f26c0e2c7dd23f2d7f12f7e418" + integrity sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +staged-git-files@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" + integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +string-argv@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +synchronous-promise@^2.0.6: + version "2.0.9" + resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.9.tgz#b83db98e9e7ae826bf9c8261fd8ac859126c780a" + integrity sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg== + +tar@^4: + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.5" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= + +tough-cookie@^2.3.3, tough-cookie@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +ts-jest@^24.0.0: + version "24.0.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" + integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + +tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tslint@^5.11.0: + version "5.18.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" + integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +typescript@^3.4.5: + version "3.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" + integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== + +uglify-js@^3.1.4: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + dependencies: + browser-process-hrtime "^0.1.2" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.10, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +"y18n@^3.2.1 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.0, yallist@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@10.x: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^12.0.2: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yup@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" + integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== + dependencies: + "@babel/runtime" "^7.0.0" + fn-name "~2.0.1" + lodash "^4.17.11" + property-expr "^1.5.0" + synchronous-promise "^2.0.6" + toposort "^2.0.2" From b133ecbdaa558d3c91bab9e6f8c18cc6d5c39206 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 6 Jul 2019 13:34:55 +0800 Subject: [PATCH 283/497] Replace "it" with "test" in tests. --- test/managementAPI.test.ts | 62 +++++++++++++++++++------------------- test/rbacAPI.test.ts | 6 ++-- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 0227f7ba..12727659 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -28,53 +28,53 @@ function testArray2DEquals(value: string[][], other: string[][]) { expect(Util.array2DEquals(value, other)).toBe(true); } -it('getAllSubjects', async () => { +test('getAllSubjects', async () => { const allSubjects = e.getAllSubjects(); expect(Util.arrayEquals(allSubjects, ['alice', 'bob', 'data2_admin'])); }); -it('getAllNamedSubjects', async () => { +test('getAllNamedSubjects', async () => { const allNamedSubjects = e.getAllNamedSubjects('p'); expect(Util.arrayEquals(allNamedSubjects, ['alice', 'bob', 'data2_admin'])); }); -it('getAllObjects', async () => { +test('getAllObjects', async () => { const allObjects = e.getAllObjects(); testArrayEquals(allObjects, ['data1', 'data2']); }); -it('getAllNamedObjects', async () => { +test('getAllNamedObjects', async () => { let allNamedObjects = e.getAllNamedObjects('p'); testArrayEquals(allNamedObjects, ['data1', 'data2']); allNamedObjects = e.getAllNamedObjects('p1'); testArrayEquals(allNamedObjects, []); }); -it('getAllActions', async () => { +test('getAllActions', async () => { const allActions = e.getAllActions(); testArrayEquals(allActions, ['read', 'write']); }); -it('getAllNamedActions', async () => { +test('getAllNamedActions', async () => { let allNamedActions = e.getAllNamedActions('p'); testArrayEquals(allNamedActions, ['read', 'write']); allNamedActions = e.getAllNamedActions('p1'); testArrayEquals(allNamedActions, []); }); -it('getAllRoles', async () => { +test('getAllRoles', async () => { const allRoles = e.getAllRoles(); testArrayEquals(allRoles, ['data2_admin']); }); -it('getAllNamedRoles', async () => { +test('getAllNamedRoles', async () => { let allNamedRoles = e.getAllNamedRoles('g'); testArrayEquals(allNamedRoles, ['data2_admin']); allNamedRoles = e.getAllNamedRoles('g1'); testArrayEquals(allNamedRoles, []); }); -it('getPolicy', async () => { +test('getPolicy', async () => { const policy = e.getPolicy(); testArray2DEquals(policy, [ ['alice', 'data1', 'read'], @@ -84,14 +84,14 @@ it('getPolicy', async () => { ]); }); -it('getFilteredPolicy', async () => { +test('getFilteredPolicy', async () => { let filteredPolicy = e.getFilteredPolicy(0, 'alice'); testArray2DEquals(filteredPolicy, [['alice', 'data1', 'read']]); filteredPolicy = e.getFilteredPolicy(0, 'bob'); testArray2DEquals(filteredPolicy, [['bob', 'data2', 'write']]); }); -it('getNamedPolicy', async () => { +test('getNamedPolicy', async () => { let namedPolicy = e.getNamedPolicy('p'); testArray2DEquals(namedPolicy, [ ['alice', 'data1', 'read'], @@ -103,114 +103,114 @@ it('getNamedPolicy', async () => { testArray2DEquals(namedPolicy, []); }); -it('getFilteredNamedPolicy', async () => { +test('getFilteredNamedPolicy', async () => { const filteredNamedPolicy = e.getFilteredNamedPolicy('p', 0, 'bob'); testArray2DEquals(filteredNamedPolicy, [['bob', 'data2', 'write']]); }); -it('getGroupingPolicy', async () => { +test('getGroupingPolicy', async () => { const groupingPolicy = e.getGroupingPolicy(); testArray2DEquals(groupingPolicy, [['alice', 'data2_admin']]); }); -it('getFilteredGroupingPolicy', async () => { +test('getFilteredGroupingPolicy', async () => { const filteredGroupingPolicy = e.getFilteredGroupingPolicy(0, 'alice'); testArray2DEquals(filteredGroupingPolicy, [['alice', 'data2_admin']]); }); -it('getNamedGroupingPolicy', async () => { +test('getNamedGroupingPolicy', async () => { const namedGroupingPolicy = e.getNamedGroupingPolicy('g'); testArray2DEquals(namedGroupingPolicy, [['alice', 'data2_admin']]); }); -it('getFilteredNamedGroupingPolicy', async () => { +test('getFilteredNamedGroupingPolicy', async () => { const namedGroupingPolicy = e.getFilteredNamedGroupingPolicy('g', 0, 'alice'); testArray2DEquals(namedGroupingPolicy, [['alice', 'data2_admin']]); }); -it('hasPolicy', async () => { +test('hasPolicy', async () => { const hasPolicy = e.hasPolicy('data2_admin', 'data2', 'read'); expect(hasPolicy).toBe(true); }); -it('hasNamedPolicy', async () => { +test('hasNamedPolicy', async () => { const hasNamedPolicy = e.hasNamedPolicy('p', 'data2_admin', 'data2', 'read'); expect(hasNamedPolicy).toBe(true); }); -it('addPolicy', async () => { +test('addPolicy', async () => { const p = ['eve', 'data3', 'read']; const added = await e.addPolicy(...p); expect(added).toBe(true); expect(e.hasPolicy(...p)).toBe(true); }); -it('addNamedPolicy', async () => { +test('addNamedPolicy', async () => { const p = ['eve', 'data3', 'read']; const added = await e.addNamedPolicy('p', ...p); expect(added).toBe(true); expect(e.hasPolicy(...p)).toBe(true); }); -it('removePolicy', async () => { +test('removePolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removePolicy(...p); expect(removed).toBe(true); expect(e.hasPolicy(...p)).toBe(false); }); -it('removeFilteredPolicy', async () => { +test('removeFilteredPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeFilteredPolicy(0, ...p); expect(removed).toBe(true); expect(e.hasPolicy(...p)).toBe(false); }); -it('removeNamedPolicy', async () => { +test('removeNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeNamedPolicy('p', ...p); expect(removed).toBe(true); expect(e.hasPolicy(...p)).toBe(false); }); -it('removeFilteredNamedPolicy', async () => { +test('removeFilteredNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeFilteredNamedPolicy('p', 0, ...p); expect(removed).toBe(true); expect(e.hasPolicy(...p)).toBe(false); }); -it('hasGroupingPolicy', async () => { +test('hasGroupingPolicy', async () => { const has = e.hasGroupingPolicy('alice', 'data2_admin'); expect(has).toBe(true); }); -it('hasNamedGroupingPolicy', async () => { +test('hasNamedGroupingPolicy', async () => { const has = e.hasNamedGroupingPolicy('g', 'alice', 'data2_admin'); expect(has).toBe(true); }); -it('addGroupingPolicy', async () => { +test('addGroupingPolicy', async () => { const added = await e.addGroupingPolicy('group1', 'data2_admin'); expect(added).toBe(true); }); -it('addNamedGroupingPolicy ', async () => { +test('addNamedGroupingPolicy ', async () => { const added = await e.addNamedGroupingPolicy('g', 'group1', 'data2_admin'); expect(added).toBe(true); }); -it('removeGroupingPolicy', async () => { +test('removeGroupingPolicy', async () => { const removed = await e.removeGroupingPolicy('alice', 'data2_admin'); expect(removed).toBe(true); }); -it('removeFilteredGroupingPolicy', async () => { +test('removeFilteredGroupingPolicy', async () => { const removed = await e.removeFilteredGroupingPolicy(0, 'alice'); expect(removed).toBe(true); }); -it('removeFilteredNamedGroupingPolicy', async () => { +test('removeFilteredNamedGroupingPolicy', async () => { const removed = await e.removeFilteredNamedGroupingPolicy('g', 0, 'alice'); expect(removed).toBe(true); }); diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index 38909c5e..b7959d38 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -14,18 +14,18 @@ import { newEnforcer } from '../src'; -it('test getImplicitRolesForUser', async () => { +test('test getImplicitRolesForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitRolesForUser('bob')).toEqual([]); expect(await e.getImplicitRolesForUser('alice')).toEqual(['admin', 'data1_admin', 'data2_admin']); }); -it('test getImplicitRolesForUser with domain', async () => { +test('test getImplicitRolesForUser with domain', async () => { const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['role:global_admin', 'role:reader', 'role:writer']); }); -it('test getImplicitPermissionsForUser', async () => { +test('test getImplicitPermissionsForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ From 8c91862f7fc1c66e1814cfc4e735265ae1522cbe Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 6 Jul 2019 14:11:10 +0800 Subject: [PATCH 284/497] Bump to v3.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c67b1c87..2186fd7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.1", + "version": "3.0.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From e78575ff07bc2ce53a83f6d855a49d25363fe97e Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sat, 6 Jul 2019 17:08:35 +0800 Subject: [PATCH 285/497] Improve matcher escaping --- src/model/model.ts | 18 ++++++++++++++++++ test/model.test.ts | 10 +++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/model/model.ts b/src/model/model.ts index 5874e14e..271f3ce5 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -79,15 +79,32 @@ export class Model { if (sec === 'r' || sec === 'p') { const tokens = value.split(', '); + for (let i = 0; i < tokens.length; i++) { tokens[i] = key + '_' + tokens[i]; } + ast.tokens = tokens; + } else if (sec === 'm') { + const stringArguments = value.match(/\"(.*?)\"/g) || []; + + stringArguments.forEach((n, index) => { + value = value.replace(n, `$<${index}>`); + }); + + value = util.removeComments(util.escapeAssertion(value)); + + stringArguments.forEach((n, index) => { + value = value.replace(`$<${index}>`, n); + }); + + ast.value = value; } else { ast.value = util.removeComments(util.escapeAssertion(value)); } const nodeMap = this.model.get(sec); + if (nodeMap) { nodeMap.set(key, ast); } else { @@ -95,6 +112,7 @@ export class Model { assertionMap.set(key, ast); this.model.set(sec, assertionMap); } + return true; } diff --git a/test/model.test.ts b/test/model.test.ts index 1bc3efd0..1d77c141 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -13,7 +13,7 @@ // limitations under the License. import * as _ from 'lodash'; -import { newEnforcer, Enforcer } from '../src'; +import { newEnforcer, Enforcer, newModel } from '../src'; async function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean) { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); @@ -274,3 +274,11 @@ test('TestPriorityModelIndeterminate', async () => { await testEnforce(e, 'alice', 'data1', 'read', false); }); + +test('TestMatcher', async () => { + const m = newModel(); + + m.addDef('m', 'm', 'keyMatch(r.obj, ".*get$") || regexMatch(r.act, ".user.")'); + + expect(m.model.get('m')!.get('m')!.value).toEqual(`keyMatch(r_obj, ".*get$") || regexMatch(r_act, ".user.")`); +}); From ac0b8fc5d428bfcc87dae96b98c999434a4665d6 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 6 Jul 2019 21:37:19 +0800 Subject: [PATCH 286/497] Bump to v3.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2186fd7b..d2450ee5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.2", + "version": "3.0.3", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 30ab6b5bcea7b2e89695066650fd17666bbf773d Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 25 Jul 2019 21:28:23 +0800 Subject: [PATCH 287/497] Upgrade lodash to the latest version --- package.json | 2 +- yarn.lock | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d2450ee5..6343738c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "dependencies": { "expression-eval": "^2.0.0", "ip": "^1.1.5", - "lodash": "^4.17.10" + "lodash": "^4.17.15" }, "files": [ "lib", diff --git a/yarn.lock b/yarn.lock index ef62826f..2ddaa416 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2599,11 +2599,16 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.10, lodash@^4.17.11: +lodash@^4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" From dce6e4753663d37b1e2c9c3c2e229cbc836b17cb Mon Sep 17 00:00:00 2001 From: Jannik Hollenbach Date: Sat, 17 Aug 2019 11:14:22 +0200 Subject: [PATCH 288/497] Add back policy management readme section --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 6c266216..77532f5a 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,19 @@ npm install casbin --save 4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. +## Policy management + +Casbin provides two sets of APIs to manage permissions: + +- [Management API](https://casbin.org/docs/en/management-api): the primitive API that provides full support for Casbin policy management. +- [RBAC API](https://casbin.org/docs/en/rbac-api): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. + +We also provide a [web-based UI](https://casbin.org/docs/en/admin-portal) for model management and policy management: + +![model editor](https://hsluoyz.github.io/casbin/ui_model_editor.png) + +![policy editor](https://hsluoyz.github.io/casbin/ui_policy_editor.png) + ## Documentation https://casbin.org/docs/en/overview From 4ac6ad1797f06f21ff6f2cce2d297927403b4781 Mon Sep 17 00:00:00 2001 From: Jannik Hollenbach Date: Sat, 17 Aug 2019 11:20:26 +0200 Subject: [PATCH 289/497] Add back policy persistence section Closes #84 --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 77532f5a..40ea138f 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,10 @@ We also provide a [web-based UI](https://casbin.org/docs/en/admin-portal) for mo ![policy editor](https://hsluoyz.github.io/casbin/ui_policy_editor.png) +## Policy persistence + +https://casbin.org/docs/en/adapters + ## Documentation https://casbin.org/docs/en/overview From acff4ba1c91793012dc99b5c412817418614d15a Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 22 Aug 2019 23:42:30 +0800 Subject: [PATCH 290/497] Fix buildRoleLinks method --- src/model/model.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 271f3ce5..af789504 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -157,9 +157,9 @@ export class Model { if (!astMap) { return; } - astMap.forEach(async value => { + for (const value of astMap.values()) { await value.buildRoleLinks(rm); - }); + } } // clearPolicy clears all current policy. From 66e5f54e8d44fb24411a0de5cfa66882be6793c7 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 25 Oct 2019 10:49:42 +0800 Subject: [PATCH 291/497] Cache the precompilled expressions to speed up. --- src/coreEnforcer.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 03dbb014..fce71c49 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -30,6 +30,7 @@ export class CoreEnforcer { protected model: Model; protected fm: FunctionMap; private eft: Effector; + private matcherMap: Map Promise>; protected adapter: FilteredAdapter | Adapter; protected watcher: Watcher | null = null; @@ -42,6 +43,7 @@ export class CoreEnforcer { public initialize(): void { this.rm = new DefaultRoleManager(10); this.eft = new DefaultEffector(); + this.matcherMap = new Map Promise>(); this.watcher = null; this.enabled = true; @@ -278,7 +280,11 @@ export class CoreEnforcer { throw new Error('model is undefined'); } - const expression = compileAsync(expString); + let expression = this.matcherMap.get(expString); + if (!expression) { + expression = compileAsync(expString); + this.matcherMap.set(expString, expression); + } let policyEffects: Effect[]; let matcherResults: number[]; From f23ae6826cb9df023e0035ec253f73bd3bf343aa Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 29 Oct 2019 21:26:45 +0800 Subject: [PATCH 292/497] Add enforceWithSyncCompile --- src/coreEnforcer.ts | 56 +++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index fce71c49..efd4affc 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { compileAsync } from 'expression-eval'; +import { compileAsync, compile } from 'expression-eval'; import * as _ from 'lodash'; import { DefaultEffector, Effect, Effector } from './effect'; @@ -30,7 +30,7 @@ export class CoreEnforcer { protected model: Model; protected fm: FunctionMap; private eft: Effector; - private matcherMap: Map Promise>; + private matcherMap: Map Promise) | ((context: object) => any)>; protected adapter: FilteredAdapter | Adapter; protected watcher: Watcher | null = null; @@ -43,7 +43,7 @@ export class CoreEnforcer { public initialize(): void { this.rm = new DefaultRoleManager(10); this.eft = new DefaultEffector(); - this.matcherMap = new Map Promise>(); + this.matcherMap = new Map(); this.watcher = null; this.enabled = true; @@ -247,15 +247,7 @@ export class CoreEnforcer { await this.model.buildRoleLinks(this.rm); } - /** - * enforce decides whether a "subject" can access a "object" with - * the operation "action", input parameters are usually: (sub, obj, act). - * - * @param rvals the request needs to be mediated, usually an array - * of strings, can be class instances if ABAC is used. - * @return whether to allow the request. - */ - public async enforce(...rvals: any[]): Promise { + private async privateEnforce(asyncCompile: boolean = true, ...rvals: any[]) { if (!this.enabled) { return true; } @@ -280,10 +272,12 @@ export class CoreEnforcer { throw new Error('model is undefined'); } - let expression = this.matcherMap.get(expString); + const matcherKey = `${asyncCompile ? 'ASYNC[' : 'SYNC['}${expString}]`; + + let expression = this.matcherMap.get(matcherKey); if (!expression) { - expression = compileAsync(expString); - this.matcherMap.set(expString, expression); + expression = asyncCompile ? compileAsync(expString) : compile(expString); + this.matcherMap.set(matcherKey, expression); } let policyEffects: Effect[]; @@ -310,7 +304,8 @@ export class CoreEnforcer { parameters[token] = pvals[j]; }); - const result = await expression({ ...parameters, ...functions }); + const context = { ...parameters, ...functions }; + const result = asyncCompile ? await expression(context) : expression(context); switch (typeof result) { case 'boolean': @@ -364,7 +359,8 @@ export class CoreEnforcer { parameters[token] = ''; }); - const result = await expression({ ...parameters, ...functions }); + const context = { ...parameters, ...functions }; + const result = asyncCompile ? await expression(context) : expression(context); if (result) { policyEffects[0] = Effect.Allow; @@ -392,4 +388,30 @@ export class CoreEnforcer { return res; } + + /** + * If the matchers does not contain an asynchronous method, call it faster. + * + * enforceWithSyncCompile decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ + public async enforceWithSyncCompile(...rvals: any[]) { + return this.privateEnforce(false, ...rvals); + } + + /** + * enforce decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ + public async enforce(...rvals: any[]): Promise { + return this.privateEnforce(true, ...rvals); + } } From 58eae6680576b8d182fa4d2028fcc9172ce15612 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 29 Oct 2019 21:46:21 +0800 Subject: [PATCH 293/497] Revision version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6343738c..724c4d04 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.3", + "version": "3.0.4", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 522d2e67ddaf8651f67969c1b20fa85f6a37a2ce Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 29 Oct 2019 21:47:53 +0800 Subject: [PATCH 294/497] v3.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 724c4d04..cd46c275 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.4", + "version": "3.0.5", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 44e573f14045239fddb329275e9b357eb69eed36 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 5 Nov 2019 22:08:32 +0800 Subject: [PATCH 295/497] Add keyMatch4() --- src/model/functionMap.ts | 2 + src/util/builtinOperators.ts | 79 +++++++++++++++++++++++++++++++++++- test/util.test.ts | 14 +++++++ 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index f0edf1f3..5df6aaf5 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -31,6 +31,8 @@ export class FunctionMap { fm.addFunction('keyMatch', util.keyMatchFunc); fm.addFunction('keyMatch2', util.keyMatch2Func); + fm.addFunction('keyMatch3', util.keyMatch3Func); + fm.addFunction('keyMatch4', util.keyMatch4Func); fm.addFunction('regexMatch', util.regexMatchFunc); fm.addFunction('ipMatch', util.ipMatchFunc); diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 6757c1f8..b4e02189 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -89,6 +89,83 @@ function keyMatch3Func(...args: any[]): boolean { return keyMatch3(name1, name2); } +// keyMatch4 determines whether key1 matches the pattern of key2 (similar to RESTful path), key2 can contain a *. +// Besides what keyMatch3 does, keyMatch4 can also match repeated patterns: +// "/parent/123/child/123" matches "/parent/{id}/child/{id}" +// "/parent/123/child/456" does not match "/parent/{id}/child/{id}" +// But keyMatch3 will match both. +function keyMatch4(key1: string, key2: string): boolean { + key2 = key2.replace(/\/\*/g, '/.*'); + + const tokens: string[] = []; + let j = -1; + for (let i = 0; i < key2.length; i++) { + const c = key2.charAt(i); + if (c === '{') { + j = i; + } else if (c === '}') { + tokens.push(key2.substring(j, i + 1)); + } + } + + let regexp = new RegExp(/(.*){[^/]+}(.*)/g); + + for (;;) { + if (!key2.includes('/{')) { + break; + } + key2 = key2.replace(regexp, '$1([^/]+)$2'); + } + + regexp = new RegExp('^' + key2 + '$'); + + let values: RegExpExecArray | null | string[] = regexp.exec(key1); + + if (!values) { + return false; + } + + values = values.slice(1); + + if (tokens.length !== values.length) { + throw new Error('KeyMatch4: number of tokens is not equal to number of values'); + } + + const m = new Map(); + tokens.forEach((n, index) => { + const key = tokens[index]; + let v = m.get(key); + if (!v) { + v = []; + } + + if (values) { + v.push(values[index]); + } + m.set(key, v); + }); + + for (const value of m.values()) { + if (value.length > 1) { + for (let i = 1; i < values.length; i++) { + if (values[i] !== values[0]) { + return false; + } + } + } + } + + return true; +} + +// keyMatch4Func is the wrapper for keyMatch4. +function keyMatch4Func(...args: any[]): boolean { + const name1: string = _.toString(args[0]); + const name2: string = _.toString(args[1]); + + return keyMatch4(name1, name2); +} + // regexMatch determines whether key1 matches the pattern of key2 in regular expression. function regexMatch(key1: string, key2: string): boolean { return new RegExp(key2).test(key1); @@ -148,4 +225,4 @@ function generateGFunction(rm: rbac.RoleManager): any { }; } -export { keyMatchFunc, keyMatch2Func, keyMatch3Func, regexMatchFunc, ipMatchFunc, generateGFunction }; +export { keyMatchFunc, keyMatch2Func, keyMatch3Func, regexMatchFunc, ipMatchFunc, generateGFunction, keyMatch4Func }; diff --git a/test/util.test.ts b/test/util.test.ts index 2d17f4b1..03e5a3a2 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -63,6 +63,20 @@ test('test keyMatch3Func', () => { expect(util.keyMatch3Func('/baz', '/foo')).toEqual(false); }); +test('test keyMatch4Func', () => { + expect(util.keyMatch4Func('/parent/123/child/123', '/parent/{id}/child/{id}')).toEqual(true); + expect(util.keyMatch4Func('/parent/123/child/456', '/parent/{id}/child/{id}')).toEqual(false); + + expect(util.keyMatch4Func('/parent/123/child/123', '/parent/{id}/child/{another_id}')).toEqual(true); + expect(util.keyMatch4Func('/parent/123/child/456', '/parent/{id}/child/{another_id}')).toEqual(true); + + expect(util.keyMatch4Func('/parent/123/child/123/book/123', '/parent/{id}/child/{id}/book/{id}')).toEqual(true); + expect(util.keyMatch4Func('/parent/123/child/123/book/456', '/parent/{id}/child/{id}/book/{id}')).toEqual(false); + expect(util.keyMatch4Func('/parent/123/child/456/book/123', '/parent/{id}/child/{id}/book/{id}')).toEqual(false); + expect(util.keyMatch4Func('/parent/123/child/456/book/', '/parent/{id}/child/{id}/book/{id}')).toEqual(false); + expect(util.keyMatch4Func('/parent/123/child/456', '/parent/{id}/child/{id}/book/{id}')).toEqual(false); +}); + test('test ipMatchFunc', () => { expect(util.ipMatchFunc('::1', '::0:1')).toEqual(true); expect(util.ipMatchFunc('192.168.1.1', '192.168.1.1')).toEqual(true); From adf3aedeb6724994427fc66525b7003f5beaa899 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 7 Nov 2019 12:42:39 +0800 Subject: [PATCH 296/497] Bump to typescript@3.7 and using eslint instead of tslint --- .eslintrc | 26 ++ package.json | 25 +- src/config.ts | 2 +- src/coreEnforcer.ts | 65 ++-- src/enforcer.ts | 16 +- src/log/defaultLogger.ts | 2 +- src/log/logUtil.ts | 8 +- src/model/model.ts | 19 +- src/persist/helper.ts | 2 +- src/rbac/defaultRoleManager.ts | 110 +++--- src/util/builtinOperators.ts | 14 +- test/enforcer.test.ts | 4 +- test/managementAPI.test.ts | 4 +- test/model.test.ts | 10 +- tsconfig.json | 11 +- tsconfig.release.json | 9 - tslint.json | 27 -- yarn.lock | 662 ++++++++++++++++++++++++++++++++- 18 files changed, 820 insertions(+), 196 deletions(-) create mode 100644 .eslintrc delete mode 100644 tsconfig.release.json delete mode 100644 tslint.json diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..c951663a --- /dev/null +++ b/.eslintrc @@ -0,0 +1,26 @@ +{ + "parser": "@typescript-eslint/parser", + "extends": [ + "plugin:@typescript-eslint/recommended", + "prettier/@typescript-eslint", + "plugin:prettier/recommended" + ], + "rules": { + "prettier/prettier": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/explicit-function-return-type": [ + "error", + { + "allowExpressions": true + } + ], + "@typescript-eslint/no-non-null-assertion": [ + "error" + ] + }, + "env": { + "jest": true, + "node": true + } +} diff --git a/package.json b/package.json index cd46c275..da003a65 100644 --- a/package.json +++ b/package.json @@ -7,25 +7,30 @@ "scripts": { "prepack": "yarn run lint && yarn run test && yarn build", "postpack": "rimraf lib", - "prettier": "prettier --write **/*.{ts,js}", - "build": "rimraf lib && tsc -p tsconfig.release.json", - "lint": "tslint -p . -c tslint.json", - "test": "jest" + "build": "rimraf lib && tsc", + "test": "jest", + "lint": "eslint . --ext .js,.ts" }, "devDependencies": { "@types/ip": "^0.0.31", "@types/jest": "^24.0.11", "@types/lodash": "^4.14.113", "@types/node": "^10.5.3", + "@typescript-eslint/eslint-plugin": "^2.6.1", + "@typescript-eslint/parser": "^2.6.1", "coveralls": "^3.0.2", + "eslint": "^6.6.0", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-prettier": "^3.1.1", "husky": "^2.3.0", "jest": "^24.3.1", "lint-staged": "^8.1.7", - "prettier": "^1.17.1", + "prettier": "^1.18.2", + "pretty-quick": "^2.0.1", "rimraf": "^2.6.2", "ts-jest": "^24.0.0", "tslint": "^5.11.0", - "typescript": "^3.4.5" + "typescript": "^3.7.2" }, "dependencies": { "expression-eval": "^2.0.0", @@ -49,15 +54,9 @@ ], "husky": { "hooks": { - "pre-commit": "lint-staged" + "pre-commit": "yarn lint && pretty-quick --staged" } }, - "lint-staged": { - "*.{ts,js}": [ - "prettier --write", - "git add" - ] - }, "publishConfig": { "registry": "https://registry.yarnpkg.com" } diff --git a/src/config.ts b/src/config.ts index 4d3664c5..976af49c 100644 --- a/src/config.ts +++ b/src/config.ts @@ -116,7 +116,7 @@ export class Config { }); } - private write(section: string, lineNum: number, line: string) { + private write(section: string, lineNum: number, line: string): void { const equalIndex = line.indexOf('='); if (equalIndex === -1) { throw new Error(`parse the content error : line ${lineNum}`); diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index efd4affc..b7833b78 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -13,7 +13,6 @@ // limitations under the License. import { compileAsync, compile } from 'expression-eval'; -import * as _ from 'lodash'; import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel } from './model'; @@ -156,7 +155,7 @@ export class CoreEnforcer { public async loadFilteredPolicy(filter: Filter): Promise { this.model.clearPolicy(); - if ((this.adapter as FilteredAdapter).isFiltered) { + if ((this.adapter as FilteredAdapter).isFiltered()) { await (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); } else { throw new Error('filtered policies are not supported by this adapter'); @@ -187,7 +186,7 @@ export class CoreEnforcer { */ public async savePolicy(): Promise { if (this.isFiltered()) { - throw new Error('cannot save a filtered policy'); + throw new Error('Cannot save a filtered policy'); } const flag = await this.adapter.savePolicy(this.model); if (!flag) { @@ -247,7 +246,7 @@ export class CoreEnforcer { await this.model.buildRoleLinks(this.rm); } - private async privateEnforce(asyncCompile: boolean = true, ...rvals: any[]) { + private async privateEnforce(asyncCompile = true, ...rvals: any[]): Promise { if (!this.enabled) { return true; } @@ -259,17 +258,21 @@ export class CoreEnforcer { const astMap = this.model.model.get('g'); - if (astMap) { - astMap.forEach((value, key) => { - const rm = value.rm; - functions[key] = generateGFunction(rm); - }); - } - - const expString = this.model.model.get('m')!.get('m')!.value; + // TODO Typescript 3.7 is not supported by prettier + // eslint-disable-next-line prettier/prettier + astMap?.forEach((value, key) => { + const rm = value.rm; + functions[key] = generateGFunction(rm); + }); + const expString = this.model.model.get('m')?.get('m')?.value; if (!expString) { - throw new Error('model is undefined'); + throw new Error('Unable to find matchers in model'); + } + + const effect = this.model.model.get('e')?.get('e')?.value; + if (!effect) { + throw new Error('Unable to find policy_effect in model'); } const matcherKey = `${asyncCompile ? 'ASYNC[' : 'SYNC['}${expString}]`; @@ -283,25 +286,29 @@ export class CoreEnforcer { let policyEffects: Effect[]; let matcherResults: number[]; - const policyLen = this.model.model.get('p')!.get('p')!.policy.length; + const p = this.model.model.get('p')?.get('p'); + const policyLen = p?.policy?.length; + + const rTokens = this.model.model.get('r')?.get('r')?.tokens; + const rTokensLen = rTokens?.length; - if (policyLen !== 0) { + if (policyLen && policyLen !== 0) { policyEffects = new Array(policyLen); matcherResults = new Array(policyLen); for (let i = 0; i < policyLen; i++) { - const pvals = this.model.model.get('p')!.get('p')!.policy[i]; - const parameters: { [key: string]: any } = {}; - const { tokens: rTokens } = this.model.model.get('r')!.get('r')!; + if (rTokens?.length !== rvals.length) { + throw new Error(`invalid request size: expected ${rTokensLen}, got ${rvals.length}, rvals: ${rvals}"`); + } + rTokens.forEach((token, j) => { parameters[token] = rvals[j]; }); - const { tokens: gTokens } = this.model.model.get('p')!.get('p')!; - gTokens.forEach((token, j) => { - parameters[token] = pvals[j]; + p?.tokens.forEach((token, j) => { + parameters[token] = p?.policy[i][j]; }); const context = { ...parameters, ...functions }; @@ -326,8 +333,8 @@ export class CoreEnforcer { throw new Error('matcher result should be boolean or number'); } - if (_.has(parameters, 'p_eft')) { - const eft = _.get(parameters, 'p_eft'); + const eft = parameters['p_eft']; + if (eft) { if (eft === 'allow') { policyEffects[i] = Effect.Allow; } else if (eft === 'deny') { @@ -339,7 +346,7 @@ export class CoreEnforcer { policyEffects[i] = Effect.Allow; } - if (this.model.model.get('e')!.get('e')!.value === 'priority(p_eft) || deny') { + if (effect === 'priority(p_eft) || deny') { break; } } @@ -349,13 +356,11 @@ export class CoreEnforcer { const parameters: { [key: string]: any } = {}; - const { tokens: rTokens } = this.model.model.get('r')!.get('r')!; - rTokens.forEach((token, j) => { + rTokens?.forEach((token, j): void => { parameters[token] = rvals[j]; }); - const { tokens: pTokens } = this.model.model.get('p')!.get('p')!; - pTokens.forEach(token => { + p?.tokens?.forEach(token => { parameters[token] = ''; }); @@ -369,7 +374,7 @@ export class CoreEnforcer { } } - const res = this.eft.mergeEffects(this.model.model.get('e')!.get('e')!.value, policyEffects, matcherResults); + const res = this.eft.mergeEffects(effect, policyEffects, matcherResults); // only generate the request --> result string if the message // is going to be logged. @@ -399,7 +404,7 @@ export class CoreEnforcer { * of strings, can be class instances if ABAC is used. * @return whether to allow the request. */ - public async enforceWithSyncCompile(...rvals: any[]) { + public async enforceWithSyncCompile(...rvals: any[]): Promise { return this.privateEnforce(false, ...rvals); } diff --git a/src/enforcer.ts b/src/enforcer.ts index 318633cb..6421e9a4 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -83,11 +83,10 @@ export class Enforcer extends ManagementEnforcer { * @return the roles that the user has. */ public async getRolesForUser(name: string, domain?: string): Promise { - const rm = this.model.model.get('g')!.get('g')!.rm; if (domain == null) { - return await rm.getRoles(name); + return await this.rm.getRoles(name); } else { - return await rm.getRoles(name, domain); + return await this.rm.getRoles(name, domain); } } @@ -99,11 +98,10 @@ export class Enforcer extends ManagementEnforcer { * @return the users that has the role. */ public async getUsersForRole(name: string, domain?: string): Promise { - const rm = this.model.model.get('g')!.get('g')!.rm; if (domain == null) { - return await rm.getUsers(name); + return await this.rm.getUsers(name); } else { - return await rm.getUsers(name, domain); + return await this.rm.getUsers(name, domain); } } @@ -117,7 +115,7 @@ export class Enforcer extends ManagementEnforcer { */ public async hasRoleForUser(name: string, role: string, domain?: string): Promise { const roles = await this.getRolesForUser(name, domain); - let hasRole: boolean = false; + let hasRole = false; for (const r of roles) { if (r === role) { hasRole = true; @@ -281,7 +279,7 @@ export class Enforcer extends ManagementEnforcer { * getRolesForUser("alice") can only get: ["role:admin"]. * But getImplicitRolesForUser("alice") will get: ["role:admin", "role:user"]. */ - public async getImplicitRolesForUser(name: string, ...domain: string[]) { + public async getImplicitRolesForUser(name: string, ...domain: string[]): Promise { const res: string[] = []; const roles = await this.rm.getRoles(name, ...domain); res.push(...roles); @@ -304,7 +302,7 @@ export class Enforcer extends ManagementEnforcer { * getPermissionsForUser("alice") can only get: [["alice", "data2", "read"]]. * But getImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]]. */ - public async getImplicitPermissionsForUser(user: string) { + public async getImplicitPermissionsForUser(user: string): Promise { const roles = [user, ...(await this.getImplicitRolesForUser(user))]; const res: string[][] = []; roles.forEach(n => { diff --git a/src/log/defaultLogger.ts b/src/log/defaultLogger.ts index 8c551c5f..88b83f89 100644 --- a/src/log/defaultLogger.ts +++ b/src/log/defaultLogger.ts @@ -16,7 +16,7 @@ import { Logger } from './logger'; // DefaultLogger is the implementation for a Logger export class DefaultLogger implements Logger { - private enable: boolean = false; + private enable = false; public enableLog(enable: boolean): void { this.enable = enable; diff --git a/src/log/logUtil.ts b/src/log/logUtil.ts index 2263c793..146910dc 100644 --- a/src/log/logUtil.ts +++ b/src/log/logUtil.ts @@ -18,22 +18,22 @@ import { Logger } from './logger'; let logger: Logger = new DefaultLogger(); // setLogger sets the current logger. -function setLogger(l: Logger) { +function setLogger(l: Logger): void { logger = l; } // getLogger returns the current logger. -function getLogger() { +function getLogger(): Logger { return logger; } // logPrint prints the log. -function logPrint(...v: any[]) { +function logPrint(...v: any[]): void { logger.print(...v); } // logPrintf prints the log with the format. -function logPrintf(format: string, ...v: any[]) { +function logPrintf(format: string, ...v: any[]): void { logger.printf(format, ...v); } diff --git a/src/model/model.ts b/src/model/model.ts index af789504..63e76092 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -57,7 +57,7 @@ export class Model { private loadSection(cfg: Config, sec: string): void { // console.log('loadSection: ', sec); let i = 1; - for (;;) { + for (; ;) { if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { break; } else { @@ -176,7 +176,10 @@ export class Model { // getPolicy gets all rules in a policy. public getPolicy(sec: string, key: string): string[][] { const policy: string[][] = []; - const ast = this.model.get(sec)!.get(key); + + // TODO Typescript 3.7 is not supported by prettier + // eslint-disable-next-line prettier/prettier + const ast = this.model.get(sec)?.get(key); if (ast) { policy.push(...ast.policy); } @@ -185,7 +188,7 @@ export class Model { // hasPolicy determines whether a model has the specified policy rule. public hasPolicy(sec: string, key: string, rule: string[]): boolean { - const ast = this.model.get(sec)!.get(key); + const ast = this.model.get(sec)?.get(key); if (!ast) { return false; } @@ -195,7 +198,7 @@ export class Model { // addPolicy adds a policy rule to the model. public addPolicy(sec: string, key: string, rule: string[]): boolean { if (!this.hasPolicy(sec, key, rule)) { - const ast = this.model.get(sec)!.get(key); + const ast = this.model.get(sec)?.get(key); if (!ast) { return false; } @@ -209,7 +212,7 @@ export class Model { // removePolicy removes a policy rule from the model. public removePolicy(sec: string, key: string, rule: string[]): boolean { if (this.hasPolicy(sec, key, rule)) { - const ast = this.model.get(sec)!.get(key); + const ast = this.model.get(sec)?.get(key); if (!ast) { return true; } @@ -223,7 +226,7 @@ export class Model { // getFilteredPolicy gets rules based on field filters from a policy. public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): string[][] { const res: string[][] = []; - const ast = this.model.get(sec)!.get(key); + const ast = this.model.get(sec)?.get(key); if (!ast) { return res; } @@ -249,7 +252,7 @@ export class Model { public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): boolean { const res = []; let bool = false; - const ast = this.model.get(sec)!.get(key); + const ast = this.model.get(sec)?.get(key); if (!ast) { return bool; } @@ -277,7 +280,7 @@ export class Model { // getValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed. public getValuesForFieldInPolicy(sec: string, key: string, fieldIndex: number): string[] { const values: string[] = []; - const ast = this.model.get(sec)!.get(key); + const ast = this.model.get(sec)?.get(key); if (!ast) { return values; } diff --git a/src/persist/helper.ts b/src/persist/helper.ts index 3058a3e9..e1424ad3 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -1,7 +1,7 @@ import { Model } from '../model'; export class Helper { - public static loadPolicyLine(line: string, model: Model) { + public static loadPolicyLine(line: string, model: Model): void { if (line === '' || line.charAt(0) === '#') { return; } diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 7c9c5b82..c5a49e12 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -15,6 +15,58 @@ import { RoleManager } from './roleManager'; import { logPrint } from '../log'; +/** + * Role represents the data structure for a role in RBAC. + */ +class Role { + public name: string; + private roles: Role[]; + + constructor(name: string) { + this.name = name; + this.roles = []; + } + + public addRole(role: Role): void { + if (this.roles.some(n => n.name === role.name)) { + return; + } + this.roles.push(role); + } + + public deleteRole(role: Role): void { + this.roles = this.roles.filter(n => n.name !== role.name); + } + + public hasRole(name: string, hierarchyLevel: number): boolean { + if (this.name === name) { + return true; + } + if (hierarchyLevel <= 0) { + return false; + } + for (const role of this.roles) { + if (role.hasRole(name, hierarchyLevel - 1)) { + return true; + } + } + + return false; + } + + public hasDirectRole(name: string): boolean { + return this.roles.some(n => n.name === name); + } + + public toString(): string { + return this.name + this.roles.join(', '); + } + + public getRoles(): string[] { + return this.roles.map(n => n.name); + } +} + // RoleManager provides a default implementation for the RoleManager interface export class DefaultRoleManager implements RoleManager { private allRoles: Map; @@ -52,7 +104,7 @@ export class DefaultRoleManager implements RoleManager { /** * clear clears all stored data and resets the role manager to the initial state. */ - public async clear() { + public async clear(): Promise { this.allRoles = new Map(); } @@ -151,7 +203,7 @@ export class DefaultRoleManager implements RoleManager { /** * printRoles prints all the roles to log. */ - public async printRoles() { + public async printRoles(): Promise { [...this.allRoles.values()].map(n => { logPrint(n.toString()); }); @@ -168,59 +220,7 @@ export class DefaultRoleManager implements RoleManager { } } - private hasRole(name: string) { + private hasRole(name: string): boolean { return this.allRoles.has(name); } } - -/** - * Role represents the data structure for a role in RBAC. - */ -class Role { - public name: string; - private roles: Role[]; - - constructor(name: string) { - this.name = name; - this.roles = []; - } - - public addRole(role: Role): void { - if (this.roles.some(n => n.name === role.name)) { - return; - } - this.roles.push(role); - } - - public deleteRole(role: Role): void { - this.roles = this.roles.filter(n => n.name !== role.name); - } - - public hasRole(name: string, hierarchyLevel: number): boolean { - if (this.name === name) { - return true; - } - if (hierarchyLevel <= 0) { - return false; - } - for (const role of this.roles) { - if (role.hasRole(name, hierarchyLevel - 1)) { - return true; - } - } - - return false; - } - - public hasDirectRole(name: string): boolean { - return this.roles.some(n => n.name === name); - } - - public toString(): string { - return this.name + this.roles.join(', '); - } - - public getRoles(): string[] { - return this.roles.map(n => n.name); - } -} diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index b4e02189..a1977739 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -16,6 +16,11 @@ import * as rbac from '../rbac'; import * as ip from 'ip'; import * as _ from 'lodash'; +// regexMatch determines whether key1 matches the pattern of key2 in regular expression. +function regexMatch(key1: string, key2: string): boolean { + return new RegExp(key2).test(key1); +} + // keyMatch determines whether key1 matches the pattern of key2 (similar to RESTful path), // key2 can contain a *. // For example, '/foo/bar' matches '/foo/*' @@ -46,7 +51,7 @@ function keyMatchFunc(...args: any[]): boolean { function keyMatch2(key1: string, key2: string): boolean { key2 = key2.replace(/\/\*/g, '/.*'); - const regexp: RegExp = new RegExp(/(.*):[^/]+(.*)/g); + const regexp = new RegExp(/(.*):[^/]+(.*)/g); for (;;) { if (!_.includes(key2, '/:')) { break; @@ -70,7 +75,7 @@ function keyMatch2Func(...args: any[]): boolean { function keyMatch3(key1: string, key2: string): boolean { key2 = key2.replace(/\/\*/g, '/.*'); - const regexp: RegExp = new RegExp(/(.*){[^/]+}(.*)/g); + const regexp = new RegExp(/(.*){[^/]+}(.*)/g); for (;;) { if (!_.includes(key2, '/{')) { break; @@ -166,11 +171,6 @@ function keyMatch4Func(...args: any[]): boolean { return keyMatch4(name1, name2); } -// regexMatch determines whether key1 matches the pattern of key2 in regular expression. -function regexMatch(key1: string, key2: string): boolean { - return new RegExp(key2).test(key1); -} - // regexMatchFunc is the wrapper for regexMatch. function regexMatchFunc(...args: any[]): boolean { const name1: string = _.toString(args[0]); diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index f478d14a..b8598b2f 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -16,11 +16,11 @@ import { readFileSync } from 'fs'; import { newModel, newEnforcer, Enforcer, FileAdapter, StringAdapter, Util } from '../src'; -async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean) { +async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } -function testGetPolicy(e: Enforcer, res: string[][]) { +function testGetPolicy(e: Enforcer, res: string[][]): void { const myRes = e.getPolicy(); console.log('Policy: ', myRes); diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 12727659..11aa4e94 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -20,11 +20,11 @@ beforeEach(async () => { e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); }); -function testArrayEquals(value: string[], other: string[]) { +function testArrayEquals(value: string[], other: string[]): void { expect(Util.arrayEquals(value, other)).toBe(true); } -function testArray2DEquals(value: string[][], other: string[][]) { +function testArray2DEquals(value: string[][], other: string[][]): void { expect(Util.array2DEquals(value, other)).toBe(true); } diff --git a/test/model.test.ts b/test/model.test.ts index 1d77c141..edcf8dab 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -15,15 +15,15 @@ import * as _ from 'lodash'; import { newEnforcer, Enforcer, newModel } from '../src'; -async function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean) { +async function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } -async function testEnforceWithoutUsers(e: Enforcer, obj: string, act: string, res: boolean) { +async function testEnforceWithoutUsers(e: Enforcer, obj: string, act: string, res: boolean): Promise { await expect(e.enforce(obj, act)).resolves.toBe(res); } -async function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, act: string, res: boolean) { +async function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: string, act: string, res: boolean): Promise { await expect(e.enforce(sub, dom, obj, act)).resolves.toBe(res); } @@ -280,5 +280,7 @@ test('TestMatcher', async () => { m.addDef('m', 'm', 'keyMatch(r.obj, ".*get$") || regexMatch(r.act, ".user.")'); - expect(m.model.get('m')!.get('m')!.value).toEqual(`keyMatch(r_obj, ".*get$") || regexMatch(r_act, ".user.")`); + // TODO Typescript 3.7 is not supported by prettier + // eslint-disable-next-line prettier/prettier + expect(m.model.get('m')?.get('m')?.value).toEqual(`keyMatch(r_obj, ".*get$") || regexMatch(r_act, ".user.")`); }); diff --git a/tsconfig.json b/tsconfig.json index f5c5e0f6..621b0719 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,12 @@ "module": "commonjs", "moduleResolution": "node", "strict": true, - "outDir": "lib", - "strictPropertyInitialization": false - } + "strictPropertyInitialization": false, + "declaration": true, + "declarationDir": "lib", + "outDir": "lib" + }, + "include": [ + "src/**/*" + ] } diff --git a/tsconfig.release.json b/tsconfig.release.json deleted file mode 100644 index 1311a3fe..00000000 --- a/tsconfig.release.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declaration": true, - "declarationDir": "lib", - "outDir": "lib" - }, - "include": ["src/**/*"] -} diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 0bcf6d9c..00000000 --- a/tslint.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": "tslint:recommended", - "jsRules": {}, - "rules": { - "await-promise": true, - "no-floating-promises": true, - "only-arrow-functions": false, - "max-classes-per-file": false, - "interface-name": false, - "no-console": [ - false - ], - "arrow-parens": false, - "member-ordering": false, - "ordered-imports": false, - "object-literal-sort-keys": false, - "no-empty": false, - "quotemark": [ - true, - "single" - ], - "trailing-comma": false, - "max-line-length": false - }, - "rulesDirectory": [] -} diff --git a/yarn.lock b/yarn.lock index 2ddaa416..7785b884 100644 --- a/yarn.lock +++ b/yarn.lock @@ -332,6 +332,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz?cache=0&sync_timestamp=1572470950582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Feslint-visitor-keys%2Fdownload%2F%40types%2Feslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0= + "@types/ip@^0.0.31": version "0.0.31" resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" @@ -371,11 +376,21 @@ dependencies: "@types/jest-diff" "*" +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha1-vf1p1h5GTcyBslFZwnDXWnPBpjY= + "@types/lodash@^4.14.113": version "4.14.135" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== +"@types/minimatch@^3.0.3": + version "3.0.3" + resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0= + "@types/node@*": version "12.0.12" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.12.tgz#cc791b402360db1eaf7176479072f91ee6c6c7ca" @@ -401,6 +416,48 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== +"@typescript-eslint/eslint-plugin@^2.6.1": + version "2.6.1" + resolved "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-2.6.1.tgz#e34972a24f8aba0861f9ccf7130acd74fd11e079" + integrity sha1-40lyok+Kughh+cz3EwrNdP0R4Hk= + dependencies: + "@typescript-eslint/experimental-utils" "2.6.1" + eslint-utils "^1.4.2" + functional-red-black-tree "^1.0.1" + regexpp "^2.0.1" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.6.1": + version "2.6.1" + resolved "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-2.6.1.tgz#eddaca17a399ebf93a8628923233b4f93793acfd" + integrity sha1-7drKF6OZ6/k6hiiSMjO0+TeTrP0= + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.6.1" + eslint-scope "^5.0.0" + +"@typescript-eslint/parser@^2.6.1": + version "2.6.1" + resolved "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-2.6.1.tgz#3c00116baa0d696bc334ca18ac5286b34793993c" + integrity sha1-PAARa6oNaWvDNMoYrFKGs0eTmTw= + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.6.1" + "@typescript-eslint/typescript-estree" "2.6.1" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.6.1": + version "2.6.1" + resolved "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.6.1.tgz#fb363dd4ca23384745c5ea4b7f4c867432b00d31" + integrity sha1-+zY91MojOEdFxepLf0yGdDKwDTE= + dependencies: + debug "^4.1.1" + glob "^7.1.4" + is-glob "^4.0.1" + lodash.unescape "4.0.1" + semver "^6.3.0" + tsutils "^3.17.1" + abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" @@ -419,6 +476,11 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha1-KUrbcbVzmLBoABXwo4xWPuHbU4Q= + acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" @@ -434,6 +496,21 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha1-lJ028sKSU12mAig1hsJHfFfrLWw= + +ajv@^6.10.0, ajv@^6.10.2: + version "6.10.2" + resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.10.2.tgz?cache=0&sync_timestamp=1563113786760&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha1-086gTWsBeyiUrWkED+yLYj60vVI= + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^6.5.5: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" @@ -449,6 +526,13 @@ ansi-escapes@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" + integrity sha1-TczbhGw+7hD21k3qZic+q5DDcig= + dependencies: + type-fest "^0.5.2" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -524,6 +608,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/array-differ/download/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha1-PLs9DzFoEOr8xHYkc0I31q7krms= + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -536,6 +625,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -551,6 +645,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/arrify/download/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo= + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -792,7 +891,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -801,6 +900,11 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1562887878067&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" @@ -828,6 +932,13 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= + dependencies: + restore-cursor "^3.1.0" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -836,6 +947,11 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -941,7 +1057,7 @@ coveralls@^3.0.2: minimist "^1.2.0" request "^2.86.0" -cross-spawn@^6.0.0: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -952,6 +1068,15 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.1.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha1-CrVihuD3wk4VPQTMKqAn5DqaXRQ= + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + "cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -1102,6 +1227,13 @@ diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= + dependencies: + esutils "^2.0.2" + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -1122,6 +1254,16 @@ elegant-spinner@^1.0.1: resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -1174,6 +1316,92 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^6.5.0: + version "6.5.0" + resolved "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.5.0.tgz#aaf9a495e2a816865e541bfdbb73a65cc162b3eb" + integrity sha1-qvmkleKoFoZeVBv9u3OmXMFis+s= + dependencies: + get-stdin "^6.0.0" + +eslint-plugin-prettier@^3.1.1: + version "3.1.1" + resolved "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prettier%2Fdownload%2Feslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" + integrity sha1-UHuFYkENAqA/DdyUnGFvh3hS8ro= + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha1-6HyIh8c+jR7ITxylkWRcNYv8j7k= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.2, eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8= + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.1.0.tgz?cache=0&sync_timestamp=1565705523991&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha1-4qgs6oT/JGrW+1f5veW0ZiFFnsI= + +eslint@^6.6.0: + version "6.6.0" + resolved "https://registry.npm.taobao.org/eslint/download/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04" + integrity sha1-SgGi+0jTKqzvVTDunFp48RqK/QQ= + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.npm.taobao.org/espree/download/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha1-bCcmUJMrT5HDcU5ee19eLs9HJi0= + dependencies: + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -1184,6 +1412,25 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg= + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8= + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= + estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -1212,6 +1459,21 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-2.1.0.tgz?cache=0&sync_timestamp=1571325189232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha1-5dPs2DfSpg7FDz2nj9OXZ3R7vpk= + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^3.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -1269,6 +1531,15 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&sync_timestamp=1562602052556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -1298,6 +1569,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM= + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -1330,6 +1606,20 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-3.1.0.tgz?cache=0&sync_timestamp=1571715625804&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha1-SxmN0H2NcVMGQoZK8tRd2eRZxOw= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w= + dependencies: + flat-cache "^2.0.1" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -1347,7 +1637,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -1355,6 +1645,20 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA= + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha1-aeV8qo8OrLwoHS4stFjUb9tEngg= + fn-name@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" @@ -1411,6 +1715,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + g-status@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" @@ -1444,6 +1753,11 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs= + get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" @@ -1456,6 +1770,13 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha1-ASA83JJZf5uQkGfD5lbMH008Tck= + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -1468,6 +1789,13 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI= + dependencies: + is-glob "^4.0.1" + glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -1480,7 +1808,19 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: +glob@^7.1.4: + version "7.1.5" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" + integrity sha1-ZxTGm+4g88PmTE3ZBVU+UytAzcA= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -1632,7 +1972,7 @@ husky@^2.3.0: run-node "^1.0.0" slash "^3.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1646,6 +1986,16 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1565775199290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= + +ignore@^5.1.4: + version "5.1.4" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha1-hLez2+ZFUrbvDsqZ9nQ9vsbZet8= + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -1654,6 +2004,14 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-fresh@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha1-bTP6Hc7235MPrgA0RvM0Fa+QURg= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -1690,6 +2048,25 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +inquirer@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" + integrity sha1-nisDLd532h2124BHWLj+o6lwUZo= + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^4.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -1814,12 +2191,17 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -1893,6 +2275,11 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha1-venDJoDW+uBBKdasnZIc54FfeOM= + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -2414,6 +2801,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -2487,7 +2879,7 @@ leven@^2.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= -levn@~0.3.0: +levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -2599,12 +2991,17 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/lodash.unescape/download/lodash.unescape-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.unescape%2Fdownload%2Flodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + lodash@^4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -lodash@^4.17.15: +lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -2706,6 +3103,11 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -2742,7 +3144,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.0.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -2799,6 +3201,11 @@ mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +mri@^1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/mri/download/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha1-fLHdG5tAkF8frAU6viW2cg9EdEo= + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2809,6 +3216,22 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +multimatch@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/multimatch/download/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha1-jDwPbj6ESa2grz3SnvtJGjdRkbM= + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -2944,6 +3367,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" + integrity sha1-f5G+MX9qRm7+08nymArYpO6LD6U= + dependencies: + path-key "^3.0.0" + npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" @@ -3033,6 +3463,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha1-//DzyRYX/mK7UBiWNumayKbfe+U= + dependencies: + mimic-fn "^2.1.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -3041,7 +3478,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= @@ -3067,7 +3504,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -3097,6 +3534,11 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE= + p-is-promise@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" @@ -3143,6 +3585,13 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= + dependencies: + callsites "^3.0.0" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -3186,6 +3635,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" + integrity sha1-maENhwqAO91e5vBHDljfzS+aVNM= + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -3273,10 +3727,17 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^1.17.1: +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s= + dependencies: + fast-diff "^1.1.2" + +prettier@^1.18.2: version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + resolved "https://registry.npm.taobao.org/prettier/download/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha1-aCPnxZAAF7S9Os9G/prEtNe9qeo= pretty-format@^24.8.0: version "24.8.0" @@ -3288,11 +3749,28 @@ pretty-format@^24.8.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-quick@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pretty-quick/download/pretty-quick-2.0.1.tgz#417ee605ade98ecc686e72f63b5d28a2c35b43e9" + integrity sha1-QX7mBa3pjsxobnL2O10oosNbQ+k= + dependencies: + chalk "^2.4.2" + execa "^2.1.0" + find-up "^4.1.0" + ignore "^5.1.4" + mri "^1.1.4" + multimatch "^4.0.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= + prompts@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db" @@ -3409,6 +3887,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8= + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3493,6 +3976,11 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -3518,12 +4006,20 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -3535,6 +4031,13 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + run-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" @@ -3547,6 +4050,13 @@ rxjs@^6.3.3: dependencies: tslib "^1.9.0" +rxjs@^6.4.0: + version "6.5.3" + resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz?cache=0&sync_timestamp=1568815682378&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha1-UQ4mMX9NuRp+sd532d2boKSJmjo= + dependencies: + tslib "^1.9.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" @@ -3604,6 +4114,11 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== +semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -3626,11 +4141,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -3668,6 +4195,15 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY= + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -3838,6 +4374,24 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" + integrity sha1-uoRtHaqXw8WWFVMIBj4HXtHJmv8= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^5.2.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -3868,7 +4422,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -3885,6 +4439,16 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= + +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha1-hXE5dakfuHvxswXMp3OV5A0qZKc= + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -3924,6 +4488,16 @@ synchronous-promise@^2.0.6: resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.9.tgz#b83db98e9e7ae826bf9c8261fd8ac859126c780a" integrity sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg== +table@^5.2.3: + version "5.4.6" + resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha1-EpLRlQDOP4YFOwXw6Ofko7shB54= + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + tar@^4: version "4.4.10" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" @@ -3947,11 +4521,28 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -4066,6 +4657,13 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha1-7XGZF/EcoN7lhicrKsSeAVot11k= + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -4090,10 +4688,15 @@ type-fest@^0.4.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== -typescript@^3.4.5: - version "3.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" - integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== +type-fest@^0.5.2: + version "0.5.2" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" + integrity sha1-1u9CoDVsbNRfSUhcO2KB/BSOSKI= + +typescript@^3.7.2: + version "3.7.2" + resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.7.2.tgz?cache=0&sync_timestamp=1572971428838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" + integrity sha1-J+SJuV+lkJRF6f717kjYFpetGPs= uglify-js@^3.1.4: version "3.6.0" @@ -4156,6 +4759,11 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha1-4U3jezGm0ZT1aQ1n78Tn9vxqsw4= + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -4234,6 +4842,13 @@ which@^1.2.10, which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/which/download/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4" + integrity sha1-8c+U0HqOVxtv8AauuR0DAMR+8KQ= + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -4281,6 +4896,13 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write@1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz?cache=0&sync_timestamp=1567579932525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite%2Fdownload%2Fwrite-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM= + dependencies: + mkdirp "^0.5.1" + ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" From dbd5f991be912ad14e4864ebb8c926460905986c Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 7 Nov 2019 18:09:29 +0800 Subject: [PATCH 297/497] v3.0.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index da003a65..223f6846 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.5", + "version": "3.0.6", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 9978ac83304948cb9f756119afa003d726c9d3c8 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 10 Nov 2019 17:45:25 +0800 Subject: [PATCH 298/497] Bump prettier from 1.18.2 to 1.19.1 --- package.json | 2 +- src/coreEnforcer.ts | 2 -- src/model/model.ts | 4 +--- test/model.test.ts | 2 -- yarn.lock | 8 ++++---- 5 files changed, 6 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 223f6846..3c8ec9fb 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "husky": "^2.3.0", "jest": "^24.3.1", "lint-staged": "^8.1.7", - "prettier": "^1.18.2", + "prettier": "^1.19.1", "pretty-quick": "^2.0.1", "rimraf": "^2.6.2", "ts-jest": "^24.0.0", diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index b7833b78..37dd1c96 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -258,8 +258,6 @@ export class CoreEnforcer { const astMap = this.model.model.get('g'); - // TODO Typescript 3.7 is not supported by prettier - // eslint-disable-next-line prettier/prettier astMap?.forEach((value, key) => { const rm = value.rm; functions[key] = generateGFunction(rm); diff --git a/src/model/model.ts b/src/model/model.ts index 63e76092..ff574c20 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -57,7 +57,7 @@ export class Model { private loadSection(cfg: Config, sec: string): void { // console.log('loadSection: ', sec); let i = 1; - for (; ;) { + for (;;) { if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { break; } else { @@ -177,8 +177,6 @@ export class Model { public getPolicy(sec: string, key: string): string[][] { const policy: string[][] = []; - // TODO Typescript 3.7 is not supported by prettier - // eslint-disable-next-line prettier/prettier const ast = this.model.get(sec)?.get(key); if (ast) { policy.push(...ast.policy); diff --git a/test/model.test.ts b/test/model.test.ts index edcf8dab..d8123fd6 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -280,7 +280,5 @@ test('TestMatcher', async () => { m.addDef('m', 'm', 'keyMatch(r.obj, ".*get$") || regexMatch(r.act, ".user.")'); - // TODO Typescript 3.7 is not supported by prettier - // eslint-disable-next-line prettier/prettier expect(m.model.get('m')?.get('m')?.value).toEqual(`keyMatch(r_obj, ".*get$") || regexMatch(r_act, ".user.")`); }); diff --git a/yarn.lock b/yarn.lock index 7785b884..2afee8c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3734,10 +3734,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^1.18.2: - version "1.18.2" - resolved "https://registry.npm.taobao.org/prettier/download/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha1-aCPnxZAAF7S9Os9G/prEtNe9qeo= +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha1-99f1/4qc2HKnvkyhQglZVqYHl8s= pretty-format@^24.8.0: version "24.8.0" From 687c10f01d35c30a7e88bc2deef18187f0396dd7 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 18 Nov 2019 22:46:57 +0800 Subject: [PATCH 299/497] Fix split error --- src/persist/helper.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/persist/helper.ts b/src/persist/helper.ts index e1424ad3..f13350a3 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -2,11 +2,11 @@ import { Model } from '../model'; export class Helper { public static loadPolicyLine(line: string, model: Model): void { - if (line === '' || line.charAt(0) === '#') { + if (!line || line.trim() === '' || line.charAt(0) === '#') { return; } - const tokens = line.split(', ').map(n => n.trim()); + const tokens = line.split(',').map(n => n.trim()); const key = tokens[0]; const sec = key.substring(0, 1); const item = model.model.get(sec); From 6d2d9b00008cff031de04fcba354b7ee5b4cb5c3 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 18 Nov 2019 22:50:48 +0800 Subject: [PATCH 300/497] v3.0.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c8ec9fb..c3141032 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.6", + "version": "3.0.7", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 9b95d03146ce7dd5d1b58469f3f302df268b4792 Mon Sep 17 00:00:00 2001 From: Kyle McCarthy Date: Sun, 8 Dec 2019 19:18:41 -0600 Subject: [PATCH 301/497] Update casbin-rs link in README Update README with correct link to Rust's Casbin repo -- https://github.com/casbin/casbin-rs/issues/23 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 40ea138f..b3869919 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ node-Casbin is a powerful and efficient open-source access control library for N [Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) production-ready | production-ready | production-ready | production-ready -[![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/Devolutions/casbin-rs) +[![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) ----|----|----|---- -[PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/Devolutions/casbin-rs) +[PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/casbin/casbin-rs) production-ready | production-ready | experimental | WIP ## Installation From fc2ac9111e2e80bdd0fa49247ac174443e44b5d7 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 11 Dec 2019 23:24:25 +0800 Subject: [PATCH 302/497] Add check for model sections (#102) --- .eslintignore | 2 + src/config.ts | 12 +++++- src/model/model.ts | 65 ++++++++++++++++++++++--------- test/model/model.test.ts | 83 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 142 insertions(+), 20 deletions(-) create mode 100644 .eslintignore create mode 100644 test/model/model.test.ts diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..d6126e3d --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +lib +examples diff --git a/src/config.ts b/src/config.ts index 976af49c..dec91316 100644 --- a/src/config.ts +++ b/src/config.ts @@ -13,7 +13,17 @@ // limitations under the License. import { readFileSync } from 'fs'; -export class Config { +// ConfigInterface defines the behavior of a Config implementation +export interface ConfigInterface { + getString(key: string): string; + getStrings(key: string): string[]; + getBool(key: string): boolean; + getInt(key: string): number; + getFloat(key: string): number; + set(key: string, value: string): void; +} + +export class Config implements ConfigInterface { private static DEFAULT_SECTION = 'default'; private static DEFAULT_COMMENT = '#'; private static DEFAULT_COMMENT_SEM = ';'; diff --git a/src/model/model.ts b/src/model/model.ts index ff574c20..8a135bdb 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -15,11 +15,11 @@ import * as _ from 'lodash'; import * as rbac from '../rbac'; import * as util from '../util'; -import { Config } from '../config'; +import { Config, ConfigInterface } from '../config'; import { Assertion } from './assertion'; import { logPrint } from '../log'; -const sectionNameMap: { [index: string]: string } = { +export const sectionNameMap: { [index: string]: string } = { r: 'request_definition', p: 'policy_definition', g: 'role_definition', @@ -27,6 +27,8 @@ const sectionNameMap: { [index: string]: string } = { m: 'matchers' }; +export const requiredSections = ['r', 'p', 'e', 'm']; + export class Model { // Model represents the whole access control model. // Mest-map is the collection of assertions, can be "r", "p", "g", "e", "m". @@ -39,8 +41,7 @@ export class Model { this.model = new Map>(); } - private loadAssertion(cfg: Config, sec: string, key: string): boolean { - // console.log('loadAssertion: ', sec, key); + private loadAssertion(cfg: ConfigInterface, sec: string, key: string): boolean { const secName = sectionNameMap[sec]; const value = cfg.getString(`${secName}::${key}`); return this.addDef(sec, key, value); @@ -54,8 +55,7 @@ export class Model { return _.toString(i); } - private loadSection(cfg: Config, sec: string): void { - // console.log('loadSection: ', sec); + private loadSection(cfg: ConfigInterface, sec: string): void { let i = 1; for (;;) { if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { @@ -68,7 +68,6 @@ export class Model { // addDef adds an assertion to the model. public addDef(sec: string, key: string, value: string): boolean { - // console.log('addDef: ', sec, key. value); if (value === '') { return false; } @@ -118,27 +117,37 @@ export class Model { // loadModel loads the model from model CONF file. public loadModel(path: string): void { - // console.log('loadModel: ', path); const cfg = Config.newConfig(path); - this.loadSection(cfg, 'r'); - this.loadSection(cfg, 'p'); - this.loadSection(cfg, 'e'); - this.loadSection(cfg, 'm'); - - this.loadSection(cfg, 'g'); + this.loadModelFromConfig(cfg); } // loadModelFromText loads the model from the text. public loadModelFromText(text: string): void { const cfg = Config.newConfigFromText(text); - this.loadSection(cfg, 'r'); - this.loadSection(cfg, 'p'); - this.loadSection(cfg, 'e'); - this.loadSection(cfg, 'm'); + this.loadModelFromConfig(cfg); + } + + public loadModelFromConfig(cfg: ConfigInterface): void { + for (const s in sectionNameMap) { + this.loadSection(cfg, s); + } + + const ms: string[] = []; + requiredSections.forEach(n => { + if (!this.hasSection(n)) { + ms.push(sectionNameMap[n]); + } + }); + + if (ms.length > 0) { + throw new Error(`missing required sections: ${ms.join(',')}`); + } + } - this.loadSection(cfg, 'g'); + private hasSection(sec: string): boolean { + return this.model.get(sec) !== undefined; } // printModel prints the model to the log. @@ -316,3 +325,21 @@ export function newModel(...text: string[]): Model { return m; } + +/** + * newModelFromFile creates a model from a .CONF file. + */ +export function newModelFromFile(path: string): Model { + const m = new Model(); + m.loadModel(path); + return m; +} + +/** + * newModelFromString creates a model from a string which contains model text. + */ +export function newModelFromString(text: string): Model { + const m = new Model(); + m.loadModelFromText(text); + return m; +} diff --git a/test/model/model.test.ts b/test/model/model.test.ts new file mode 100644 index 00000000..32901d26 --- /dev/null +++ b/test/model/model.test.ts @@ -0,0 +1,83 @@ +import { ConfigInterface, newModel, newModelFromFile, newModelFromString, requiredSections, sectionNameMap } from '../../src'; +import { readFileSync } from 'fs'; + +class MockConfig implements ConfigInterface { + public data = new Map(); + + getBool(key: string): boolean { + return false; + } + + getFloat(key: string): number { + return 0; + } + + getInt(key: string): number { + return 0; + } + + getString(key: string): string { + return this.data.get(key) || ''; + } + + getStrings(key: string): string[] { + return []; + } + + set(key: string, value: string): void { + // not implementation + } +} + +const basicExample = 'examples/basic_model.conf'; + +const basicConfig = new MockConfig(); +basicConfig.data.set('request_definition::r', 'sub, obj, act'); +basicConfig.data.set('policy_definition::p', 'sub, obj, act'); +basicConfig.data.set('policy_effect::e', 'some(where (p.eft == allow))'); +basicConfig.data.set('matchers::m', 'r.sub == p.sub && r.obj == p.obj && r.act == p.act'); + +test('TestNewModel', () => { + const m = newModel(); + + expect(m !== null).toBe(true); +}); + +test('TestNewModelFromFile', () => { + const m = newModelFromFile(basicExample); + + expect(m !== null).toBe(true); +}); + +test('TestNewModelFromString', () => { + const m = newModelFromString(readFileSync(basicExample).toString()); + + expect(m !== null).toBe(true); +}); + +test('TestLoadModelFromConfig', done => { + let m = newModel(); + m.loadModelFromConfig(basicConfig); + + m = newModel(); + + try { + m.loadModelFromConfig(new MockConfig()); + + done.fail('empty config should return error'); + } catch (e) { + if (e instanceof TypeError) { + throw e; + } + + if (e instanceof Error) { + requiredSections.forEach(n => { + if (!e.message.includes(n)) { + throw new Error(`section name: ${sectionNameMap[n]} should be in message`); + } + }); + } + } + + done(); +}); From fc0ef9afee65f0c642a6577f7d892ea54aa21a3e Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 12 Dec 2019 12:38:16 +0800 Subject: [PATCH 303/497] Bump to v3.0.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c3141032..498c3466 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.7", + "version": "3.0.8", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From d84e3438c1ed4b92a92a4a578cb73110267064b8 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 15 Dec 2019 20:39:26 +0800 Subject: [PATCH 304/497] ci: support fully automated version management and package publishing --- .releaserc.json | 16 + .travis.yml | 13 +- package.json | 17 +- yarn.lock | 3418 ++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 3389 insertions(+), 75 deletions(-) create mode 100644 .releaserc.json diff --git a/.releaserc.json b/.releaserc.json new file mode 100644 index 00000000..fcd8d070 --- /dev/null +++ b/.releaserc.json @@ -0,0 +1,16 @@ +{ + "debug": true, + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/npm", + [ + "@semantic-release/git", + { + "assets": ["package.json"], + "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" + } + ], + "@semantic-release/github" + ] +} diff --git a/.travis.yml b/.travis.yml index 0c613b7f..416ee8a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,13 @@ script: jobs: include: - - stage: Produce Coverage - node_js: node - script: jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage + - stage: Produce Coverage + node_js: node + script: jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage + - stage: release + node_js: lts/* + deploy: + provider: script + skip_cleanup: true + script: + - yarn semantic-release diff --git a/package.json b/package.json index 498c3466..4225ee02 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.8", + "version": "0.0.0-development", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -9,9 +9,13 @@ "postpack": "rimraf lib", "build": "rimraf lib && tsc", "test": "jest", - "lint": "eslint . --ext .js,.ts" + "lint": "eslint . --ext .js,.ts", + "semantic-release": "semantic-release", + "commit": "git-cz" }, "devDependencies": { + "@semantic-release/changelog": "^3.0.6", + "@semantic-release/git": "^7.0.18", "@types/ip": "^0.0.31", "@types/jest": "^24.0.11", "@types/lodash": "^4.14.113", @@ -19,6 +23,7 @@ "@typescript-eslint/eslint-plugin": "^2.6.1", "@typescript-eslint/parser": "^2.6.1", "coveralls": "^3.0.2", + "cz-conventional-changelog": "3.0.2", "eslint": "^6.6.0", "eslint-config-prettier": "^6.5.0", "eslint-plugin-prettier": "^3.1.1", @@ -28,6 +33,7 @@ "prettier": "^1.19.1", "pretty-quick": "^2.0.1", "rimraf": "^2.6.2", + "semantic-release": "^15.13.31", "ts-jest": "^24.0.0", "tslint": "^5.11.0", "typescript": "^3.7.2" @@ -54,10 +60,13 @@ ], "husky": { "hooks": { + "prepare-commit-msg": "exec < /dev/tty && git cz --hook || true", "pre-commit": "yarn lint && pretty-quick --staged" } }, - "publishConfig": { - "registry": "https://registry.yarnpkg.com" + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } } } diff --git a/yarn.lock b/yarn.lock index 2afee8c4..4a2254ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -105,6 +105,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.6.3": + version "7.7.6" + resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.7.6.tgz?cache=0&sync_timestamp=1575764734217&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" + integrity sha1-0YxRESGv8bTyzR1FLxuslgHdgw8= + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" @@ -146,6 +153,35 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@commitlint/execute-rule@^8.2.0": + version "8.2.0" + resolved "https://registry.npm.taobao.org/@commitlint/execute-rule/download/@commitlint/execute-rule-8.2.0.tgz#aefb3744e22613660adefb7ebcccaa60bd24e78d" + integrity sha1-rvs3ROImE2YK3vt+vMyqYL0k540= + +"@commitlint/load@>6.1.1": + version "8.2.0" + resolved "https://registry.npm.taobao.org/@commitlint/load/download/@commitlint/load-8.2.0.tgz#9ca53a0c795e4f63d796b4d42279e856549add1a" + integrity sha1-nKU6DHleT2PXlrTUInnoVlSa3Ro= + dependencies: + "@commitlint/execute-rule" "^8.2.0" + "@commitlint/resolve-extends" "^8.2.0" + babel-runtime "^6.23.0" + chalk "2.4.2" + cosmiconfig "^5.2.0" + lodash "4.17.14" + resolve-from "^5.0.0" + +"@commitlint/resolve-extends@^8.2.0": + version "8.2.0" + resolved "https://registry.npm.taobao.org/@commitlint/resolve-extends/download/@commitlint/resolve-extends-8.2.0.tgz#b7f2f0c71c10f24b98a199ed11d2c14cfd7a318f" + integrity sha1-t/LwxxwQ8kuYoZntEdLBTP16MY8= + dependencies: + "@types/node" "^12.0.2" + import-fresh "^3.0.0" + lodash "4.17.14" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + "@jest/console@^24.7.1": version "24.7.1" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" @@ -292,6 +328,84 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^12.0.9" +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz?cache=0&sync_timestamp=1570173514495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha1-Olgr21OATGum0UZXnEblITDPSjs= + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M= + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz?cache=0&sync_timestamp=1570173624145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY= + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@octokit/endpoint@^5.5.0": + version "5.5.1" + resolved "https://registry.npm.taobao.org/@octokit/endpoint/download/@octokit/endpoint-5.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Fendpoint%2Fdownload%2F%40octokit%2Fendpoint-5.5.1.tgz#2eea81e110ca754ff2de11c79154ccab4ae16b3f" + integrity sha1-LuqB4RDKdU/y3hHHkVTMq0rhaz8= + dependencies: + "@octokit/types" "^2.0.0" + is-plain-object "^3.0.0" + universal-user-agent "^4.0.0" + +"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": + version "1.2.0" + resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-1.2.0.tgz#a64d2a9d7a13555570cd79722de4a4d76371baaa" + integrity sha1-pk0qnXoTVVVwzXlyLeSk12Nxuqo= + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.3.1" + resolved "https://registry.npm.taobao.org/@octokit/request/download/@octokit/request-5.3.1.tgz#3a1ace45e6f88b1be4749c5da963b3a3b4a2f120" + integrity sha1-OhrOReb4ixvkdJxdqWOzo7Si8SA= + dependencies: + "@octokit/endpoint" "^5.5.0" + "@octokit/request-error" "^1.0.1" + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + is-plain-object "^3.0.0" + node-fetch "^2.3.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/rest@^16.27.0": + version "16.35.0" + resolved "https://registry.npm.taobao.org/@octokit/rest/download/@octokit/rest-16.35.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Frest%2Fdownload%2F%40octokit%2Frest-16.35.0.tgz#7ccc1f802f407d5b8eb21768c6deca44e7b4c0d8" + integrity sha1-fMwfgC9AfVuOshdoxt7KROe0wNg= + dependencies: + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0": + version "2.0.2" + resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-2.0.2.tgz#0888497f5a664e28b0449731d5e88e19b2a74f90" + integrity sha1-CIhJf1pmTiiwRJcx1eiOGbKnT5A= + dependencies: + "@types/node" ">= 8" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" @@ -299,6 +413,105 @@ dependencies: any-observable "^0.3.0" +"@semantic-release/changelog@^3.0.6": + version "3.0.6" + resolved "https://registry.npm.taobao.org/@semantic-release/changelog/download/@semantic-release/changelog-3.0.6.tgz#9d68d68bf732cbba1034c028bb6720091f783b2a" + integrity sha1-nWjWi/cyy7oQNMAou2cgCR94Oyo= + dependencies: + "@semantic-release/error" "^2.1.0" + aggregate-error "^3.0.0" + fs-extra "^8.0.0" + lodash "^4.17.4" + +"@semantic-release/commit-analyzer@^6.1.0": + version "6.3.3" + resolved "https://registry.npm.taobao.org/@semantic-release/commit-analyzer/download/@semantic-release/commit-analyzer-6.3.3.tgz#885f7e46e2f0aef23a23be0904dbf18d6ece45ca" + integrity sha1-iF9+RuLwrvI6I74JBNvxjW7ORco= + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.0.7" + debug "^4.0.0" + import-from "^3.0.0" + lodash "^4.17.4" + +"@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": + version "2.2.0" + resolved "https://registry.npm.taobao.org/@semantic-release/error/download/@semantic-release/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" + integrity sha1-7p1aCcmWnq3h7IZHdq7aXFzdu/A= + +"@semantic-release/git@^7.0.18": + version "7.0.18" + resolved "https://registry.npm.taobao.org/@semantic-release/git/download/@semantic-release/git-7.0.18.tgz#f37c076bc094762cb343dab49ab893d31de961e8" + integrity sha1-83wHa8CUdiyzQ9q0mriT0x3pYeg= + dependencies: + "@semantic-release/error" "^2.1.0" + aggregate-error "^3.0.0" + debug "^4.0.0" + dir-glob "^3.0.0" + execa "^3.2.0" + fs-extra "^8.0.0" + globby "^10.0.0" + lodash "^4.17.4" + micromatch "^4.0.0" + p-reduce "^2.0.0" + +"@semantic-release/github@^5.1.0": + version "5.5.5" + resolved "https://registry.npm.taobao.org/@semantic-release/github/download/@semantic-release/github-5.5.5.tgz#4666367f16d8ad91fd1d3c71a7238498de14ec38" + integrity sha1-RmY2fxbYrZH9HTxxpyOEmN4U7Dg= + dependencies: + "@octokit/rest" "^16.27.0" + "@semantic-release/error" "^2.2.0" + aggregate-error "^3.0.0" + bottleneck "^2.18.1" + debug "^4.0.0" + dir-glob "^3.0.0" + fs-extra "^8.0.0" + globby "^10.0.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^3.0.0" + issue-parser "^5.0.0" + lodash "^4.17.4" + mime "^2.4.3" + p-filter "^2.0.0" + p-retry "^4.0.0" + url-join "^4.0.0" + +"@semantic-release/npm@^5.0.5": + version "5.3.4" + resolved "https://registry.npm.taobao.org/@semantic-release/npm/download/@semantic-release/npm-5.3.4.tgz#2998cd9455aaedf278334d4a5b56f8e0b715919d" + integrity sha1-KZjNlFWq7fJ4M01KW1b44LcVkZ0= + dependencies: + "@semantic-release/error" "^2.2.0" + aggregate-error "^3.0.0" + execa "^3.2.0" + fs-extra "^8.0.0" + lodash "^4.17.15" + nerf-dart "^1.0.0" + normalize-url "^4.0.0" + npm "^6.10.3" + rc "^1.2.8" + read-pkg "^5.0.0" + registry-auth-token "^4.0.0" + tempy "^0.3.0" + +"@semantic-release/release-notes-generator@^7.1.2": + version "7.3.5" + resolved "https://registry.npm.taobao.org/@semantic-release/release-notes-generator/download/@semantic-release/release-notes-generator-7.3.5.tgz#ed0941d5b594f18fa1d2667493c03e811f97c0ff" + integrity sha1-7QlB1bWU8Y+h0mZ0k8A+gR+XwP8= + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-changelog-writer "^4.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.0.0" + debug "^4.0.0" + get-stream "^5.0.0" + import-from "^3.0.0" + into-stream "^5.0.0" + lodash "^4.17.4" + read-pkg-up "^7.0.0" + "@types/babel__core@^7.1.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f" @@ -332,11 +545,30 @@ dependencies: "@babel/types" "^7.3.0" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA= + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz?cache=0&sync_timestamp=1572470950582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Feslint-visitor-keys%2Fdownload%2F%40types%2Feslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0= +"@types/events@*": + version "3.0.0" + resolved "https://registry.npm.taobao.org/@types/events/download/@types/events-3.0.0.tgz?cache=0&sync_timestamp=1572461479213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fevents%2Fdownload%2F%40types%2Fevents-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha1-KGLz9Yqaf3w+eNefEw3U1xwlwqc= + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.1.tgz?cache=0&sync_timestamp=1572462281559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha1-qlmhxuP7xCHgfM0xqUTDDrpSFXU= + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + "@types/ip@^0.0.31": version "0.0.31" resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" @@ -386,7 +618,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== -"@types/minimatch@^3.0.3": +"@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0= @@ -396,6 +628,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.12.tgz#cc791b402360db1eaf7176479072f91ee6c6c7ca" integrity sha512-Uy0PN4R5vgBUXFoJrKryf5aTk3kJ8Rv3PdlHjl6UaX+Cqp1QE0yPQ68MPXGrZOfG7gZVNDIJZYyot0B9ubXUrQ== +"@types/node@>= 8", "@types/node@^12.0.2": + version "12.12.17" + resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.17.tgz?cache=0&sync_timestamp=1576005747255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.17.tgz#191b71e7f4c325ee0fb23bc4a996477d92b8c39b" + integrity sha1-GRtx5/TDJe4PsjvEqZZHfZK4w5s= + "@types/node@^10.5.3": version "10.14.12" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.12.tgz#0eec3155a46e6c4db1f27c3e588a205f767d622f" @@ -406,6 +643,16 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + +"@types/retry@^0.12.0": + version "0.12.0" + resolved "https://registry.npm.taobao.org/@types/retry/download/@types/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha1-KzXsz87n04zXKtmSMvvVi/+zyE0= + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -458,12 +705,20 @@ semver "^6.3.0" tsutils "^3.17.1" +JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha1-MgjB8I06TZkmGrZPkjArwV4RHKA= + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== -abbrev@1: +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -501,6 +756,35 @@ acorn@^7.1.0: resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha1-lJ028sKSU12mAig1hsJHfFfrLWw= +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4= + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk= + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.5.2.tgz?cache=0&sync_timestamp=1570869777482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagentkeepalive%2Fdownload%2Fagentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c= + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha1-2y/nJG5Tb0DZtUQqOeEX191qJOA= + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv@^6.10.0, ajv@^6.10.2: version "6.10.2" resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.10.2.tgz?cache=0&sync_timestamp=1563113786760&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" @@ -521,7 +805,14 @@ ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^3.0.0: +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + +ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -548,6 +839,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -560,6 +856,24 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.0.tgz?cache=0&sync_timestamp=1573557674483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" + integrity sha1-VoHw3PeuWICnhB2IMcRyTtnMAXI= + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/ansicolors/download/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.npm.taobao.org/ansistyles/download/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= + any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" @@ -573,11 +887,21 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.1.2 || 2", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/aproba/download/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha1-UlILiuW1aSFbNU78DKo/4eRaitw= + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -593,6 +917,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argv-formatter@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/argv-formatter/download/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" + integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -618,6 +947,16 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/array-ify/download/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -650,6 +989,11 @@ arrify@^2.0.1: resolved "https://registry.npm.taobao.org/arrify/download/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo= +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -682,6 +1026,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/atob-lite/download/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -734,6 +1083,14 @@ babel-preset-jest@^24.6.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.6.0" +babel-runtime@^6.23.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -759,6 +1116,46 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/before-after-hook/download/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU= + +bin-links@^1.1.2, bin-links@^1.1.6: + version "1.1.6" + resolved "https://registry.npm.taobao.org/bin-links/download/bin-links-1.1.6.tgz#30d33e810829305e5e61b90cfcb9a3a4f65eb516" + integrity sha1-MNM+gQgpMF5eYbkM/LmjpPZetRY= + dependencies: + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= + +bottleneck@^2.18.1: + version "2.19.5" + resolved "https://registry.npm.taobao.org/bottleneck/download/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha1-XfC5D1n9R2VuvmPHiphBkgXK3ZE= + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -783,6 +1180,13 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" @@ -809,6 +1213,11 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/btoa-lite/download/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -819,6 +1228,42 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/byline/download/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/byte-size/download/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha1-S2UQOaXs2Wdn5xo9ftOA5IvtQZE= + +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.3" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz?cache=0&sync_timestamp=1569877769995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A= + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -834,6 +1279,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cachedir@2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/cachedir/download/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" + integrity sha1-Ga+kMF4F155BdWaILgyPlg9i/w4= + +call-limit@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/call-limit/download/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" + integrity sha1-7xXyZw2z8ZklV+LZZavEWebjWNQ= + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -858,7 +1313,16 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^4.1.0: +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -875,11 +1339,33 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha1-psC74fOPOqC5Ijjstv9Cw0TUE10= + +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/cardinal/download/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -891,15 +1377,6 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chardet@^0.7.0: version "0.7.0" resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1562887878067&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -910,11 +1387,28 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== +chownr@^1.1.2, chownr@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchownr%2Fdownload%2Fchownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha1-Qtg31SOWiNVfMDADpQgjD6ZycUI= + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc= + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cidr-regex@^2.0.10: + version "2.0.10" + resolved "https://registry.npm.taobao.org/cidr-regex/download/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" + integrity sha1-rxOHi9StcE3nfW3IAHmTWLOvpw0= + dependencies: + ip-regex "^2.1.0" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -925,6 +1419,24 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.npm.taobao.org/cli-columns/download/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= + dependencies: + string-width "^2.0.0" + strip-ansi "^3.0.1" + cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -939,6 +1451,23 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-table3@^0.5.0, cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.npm.taobao.org/cli-table3/download/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha1-AlI3LZTfxA29jfBgBfSPMfZW8gI= + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/cli-table/download/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= + dependencies: + colors "1.0.3" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -961,6 +1490,28 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE= + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.npm.taobao.org/cmd-shim/download/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha1-LDUjjT3zfZjs3X1fa43Gshytx8s= + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -986,11 +1537,41 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/colors/download/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= + +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.npm.taobao.org/columnify/download/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1003,6 +1584,35 @@ commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commitizen@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/commitizen/download/commitizen-4.0.3.tgz#c19a4213257d0525b85139e2f36db7cc3b4f6dae" + integrity sha1-wZpCEyV9BSW4UTni8223zDtPba4= + dependencies: + cachedir "2.2.0" + cz-conventional-changelog "3.0.1" + dedent "0.7.0" + detect-indent "6.0.0" + find-node-modules "2.0.0" + find-root "1.1.0" + fs-extra "8.1.0" + glob "7.1.4" + inquirer "6.5.0" + is-utf8 "^0.2.1" + lodash "4.17.15" + minimist "1.2.0" + shelljs "0.7.6" + strip-bom "4.0.0" + strip-json-comments "3.0.1" + +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.npm.taobao.org/compare-func/download/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -1013,11 +1623,91 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha1-D96NCRIA616AjK8l/mGMAvSOTvo= + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha1-xvJd767vJt8S3TNBSwAf6BpUP48= + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +conventional-changelog-angular@^5.0.0: + version "5.0.6" + resolved "https://registry.npm.taobao.org/conventional-changelog-angular/download/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" + integrity sha1-JpVAxiRVOt7YCcKaNQj9wrVEwFk= + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-writer@^4.0.0: + version "4.0.11" + resolved "https://registry.npm.taobao.org/conventional-changelog-writer/download/conventional-changelog-writer-4.0.11.tgz?cache=0&sync_timestamp=1573999204276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-changelog-writer%2Fdownload%2Fconventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" + integrity sha1-n1bSEi0gyW60i6rgvx3v+u0e26Q= + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^2.0.2" + dateformat "^3.0.0" + handlebars "^4.4.0" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^5.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^3.0.0" + +conventional-commit-types@^2.0.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/conventional-commit-types/download/conventional-commit-types-2.3.0.tgz#bc3c8ebba0a9e4b3ecc548f1d0674e251ab8be22" + integrity sha1-vDyOu6Cp5LPsxUjx0GdOJRq4viI= + +conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/conventional-commits-filter/download/conventional-commits-filter-2.0.2.tgz?cache=0&sync_timestamp=1570610922404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-filter%2Fdownload%2Fconventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" + integrity sha1-8SL4n7zVu4Hiry/KwCVNBi0QOcE= + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: + version "3.0.8" + resolved "https://registry.npm.taobao.org/conventional-commits-parser/download/conventional-commits-parser-3.0.8.tgz?cache=0&sync_timestamp=1573999204008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-parser%2Fdownload%2Fconventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" + integrity sha1-IzEKm9psk8h0IkN15ysJ+ydf5xA= + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^5.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + trim-off-newlines "^1.0.0" + convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -1025,11 +1715,28 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw= + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1045,6 +1752,17 @@ cosmiconfig@^5.2.0: js-yaml "^3.13.1" parse-json "^4.0.0" +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + coveralls@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.4.tgz#f50233c9c62fd0973f710fce85fd19dba24cff4b" @@ -1057,6 +1775,22 @@ coveralls@^3.0.2: minimist "^1.2.0" request "^2.86.0" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1077,6 +1811,11 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + "cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -1089,6 +1828,47 @@ cssstyle@^1.0.0: dependencies: cssom "~0.3.6" +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +cz-conventional-changelog@3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.0.1.tgz#b1f207ae050355e7ada65aad5c52e9de3d0c8e5b" + integrity sha1-sfIHrgUDVeetplqtXFLp3j0Mjls= + dependencies: + chalk "^2.4.1" + conventional-commit-types "^2.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + right-pad "^1.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +cz-conventional-changelog@3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.0.2.tgz#f6b9a406177ab07f9a3a087e06103a045b376260" + integrity sha1-9rmkBhd6sH+aOgh+BhA6BFs3YmA= + dependencies: + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^2.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + right-pad "^1.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1110,8 +1890,20 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.npm.taobao.org/dateformat/download/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha1-puN0maTZqc+F71hyBE1ikByYia4= + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= + dependencies: + ms "2.0.0" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: @@ -1124,14 +1916,27 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -decamelize@^1.2.0: +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1141,7 +1946,7 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -dedent@^0.7.0: +dedent@0.7.0, dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= @@ -1156,6 +1961,13 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1207,6 +2019,26 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.npm.taobao.org/deprecation/download/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/detect-file/download/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha1-Cr0PVJ9p/GZZolT+lnhhhrb1KP0= + +detect-indent@~5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -1217,6 +2049,14 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +dezalgo@^1.0.0, dezalgo@~1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + diff-sequences@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" @@ -1227,6 +2067,13 @@ diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +dir-glob@^3.0.0, dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= + dependencies: + path-type "^4.0.0" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -1241,6 +2088,47 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-3.0.0.tgz?cache=0&sync_timestamp=1572620518450&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= + dependencies: + is-obj "^1.0.0" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz?cache=0&sync_timestamp=1572620518450&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc= + dependencies: + is-obj "^1.0.0" + +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-5.0.1.tgz?cache=0&sync_timestamp=1571190782798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha1-pTF0Wb09eauIz/bkQFemo/ux/O8= + +duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -1249,6 +2137,11 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/editor/download/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -1264,6 +2157,20 @@ emoji-regex@^8.0.0: resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.npm.taobao.org/encoding/download/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.0.0: + version "1.4.4" + resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -1271,6 +2178,31 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +env-ci@^4.0.0: + version "4.5.1" + resolved "https://registry.npm.taobao.org/env-ci/download/env-ci-4.5.1.tgz#2ef014dcb974728b46d1244e491e9e6ccc1923ef" + integrity sha1-LvAU3Ll0cotG0SROSR6ebMwZI+8= + dependencies: + execa "^3.2.0" + java-properties "^1.0.0" + +env-paths@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" + integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@~0.1.7: + version "0.1.7" + resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= + dependencies: + prr "~1.0.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1299,6 +2231,18 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo= + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1407,7 +2351,7 @@ esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -1446,6 +2390,19 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -1474,6 +2431,22 @@ execa@^2.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^3.2.0: + version "3.4.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha1-wI7UVQ72XYWPrCaf/IVyRG8364k= + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -1492,6 +2465,13 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/expand-tilde/download/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + expect@^24.8.0: version "24.8.0" resolved "https://registry.yarnpkg.com/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d" @@ -1574,6 +2554,17 @@ fast-diff@^1.1.2: resolved "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM= +fast-glob@^3.0.3: + version "3.1.1" + resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.1.1.tgz?cache=0&sync_timestamp=1575197566634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.1.1.tgz#87ee30e9e9f3eb40d6f254a7997655da753d7c82" + integrity sha1-h+4w6enz60DW8lSnmXZV2nU9fII= + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -1584,6 +2575,13 @@ fast-levenshtein@~2.0.4: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastq@^1.6.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" + integrity sha1-Tsijj0rCXyFJJnOtt+rpz+9H0cI= + dependencies: + reusify "^1.0.0" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -1591,6 +2589,11 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A= + figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -1630,6 +2633,38 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +find-node-modules@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/find-node-modules/download/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" + integrity sha1-XbH7nmaKPUUds9YYzRZ83VnkG2k= + dependencies: + findup-sync "^3.0.0" + merge "^1.2.1" + +find-npm-prefix@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/find-npm-prefix/download/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" + integrity sha1-jYzix4s7S55myKzGo3wjHrhBz98= + +find-root@1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/find-root/download/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ= + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -1645,6 +2680,23 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-versions@^3.0.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/find-versions/download/find-versions-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-versions%2Fdownload%2Ffind-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha1-ECl/mAMKeGgpaBaQVF72We0dJU4= + dependencies: + semver-regex "^2.0.0" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/findup-sync/download/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha1-F7EI+e5RLft6XH88iyfqnhqcCNE= + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -1659,6 +2711,14 @@ flatted@^2.0.0: resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha1-aeV8qo8OrLwoHS4stFjUb9tEngg= +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + fn-name@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" @@ -1690,6 +2750,31 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +from2@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/from2/download/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" + integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.10" + +from2@^2.1.0, from2@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@8.1.0, fs-extra@^8.0.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" @@ -1697,6 +2782,25 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" +fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: + version "1.2.10" + resolved "https://registry.npm.taobao.org/fs-vacuum/download/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: + version "1.0.10" + resolved "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1743,11 +2847,38 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/genfun/download/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc= + +gentle-fs@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/gentle-fs/download/gentle-fs-2.3.0.tgz#13538db5029400f98684be4894e8a7d8f0d1ea7f" + integrity sha1-E1ONtQKUAPmGhL5IlOin2PDR6n8= + dependencies: + aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" + fs-vacuum "^1.2.10" + graceful-fs "^4.1.11" + iferr "^0.1.5" + infer-owner "^1.0.4" + mkdirp "^0.5.1" + path-is-inside "^1.0.2" + read-cmd-shim "^1.0.1" + slide "^1.1.6" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + get-own-enumerable-property-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" @@ -1763,7 +2894,12 @@ get-stdin@^7.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== -get-stream@^4.0.0: +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -1789,14 +2925,26 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.0.0: +git-log-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/git-log-parser/download/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" + integrity sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= + dependencies: + argv-formatter "~1.0.0" + spawn-error-forwarder "~1.0.0" + split2 "~1.0.0" + stream-combiner2 "~1.1.1" + through2 "~2.0.0" + traverse "~0.6.6" + +glob-parent@^5.0.0, glob-parent@^5.1.0: version "5.1.0" resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" integrity sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI= dependencies: is-glob "^4.0.1" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: +glob@7.1.4, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -1808,6 +2956,18 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.0.0: + version "7.1.6" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078079496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.4: version "7.1.5" resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" @@ -1820,11 +2980,52 @@ glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.0, global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz?cache=0&sync_timestamp=1573231918216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal-dirs%2Fdownload%2Fglobal-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/global-modules/download/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o= + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/global-prefix/download/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globby@^10.0.0: + version "10.0.1" + resolved "https://registry.npm.taobao.org/globby/download/globby-10.0.1.tgz?cache=0&sync_timestamp=1562335642755&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" + integrity sha1-R4LDTLdd1oM1EzXFgpzDQg5gayI= + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -1836,11 +3037,33 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +got@^6.7.1: + version "6.7.1" + resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.0" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: + version "4.2.3" + resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.3.tgz?cache=0&sync_timestamp=1571871306808&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM= + "growl@~> 1.10.0": version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -1862,6 +3085,17 @@ handlebars@^4.1.2: optionalDependencies: uglify-js "^3.1.4" +handlebars@^4.4.0: + version "4.5.3" + resolved "https://registry.npm.taobao.org/handlebars/download/handlebars-4.5.3.tgz?cache=0&sync_timestamp=1574061065936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandlebars%2Fdownload%2Fhandlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha1-XPdb2HFPdgVxNRGla+fDSb7LBII= + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -1882,6 +3116,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1892,7 +3131,7 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -has-unicode@^2.0.0: +has-unicode@^2.0.0, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -1935,11 +3174,35 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg= + dependencies: + parse-passwd "^1.0.0" + +hook-std@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/hook-std/download/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" + integrity sha1-/5qv3rtqmJo1T3KbtkRc9KOnB3w= + hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hosted-git-info@^2.7.1, hosted-git-info@^2.8.5: + version "2.8.5" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha1-dZz88sTRVq3lmwst+r3cQqa5xww= + +hosted-git-info@^3.0.0: + version "3.0.2" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.2.tgz#8b7e3bd114b59b51786f8bade0f39ddc80275a97" + integrity sha1-i3470RS1m1F4b4ut4POd3IAnWpc= + dependencies: + lru-cache "^5.1.1" + html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -1947,6 +3210,19 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha1-ObDhat2bYFvwqe89nar0hDtMrNI= + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha1-5IIb7vWyFCogJr1zkm/lN2McVAU= + dependencies: + agent-base "4" + debug "3.1.0" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -1956,6 +3232,34 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz?cache=0&sync_timestamp=1576013709899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha1-TuenN6vZJniik9mzShr00NCMeHs= + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-3.0.1.tgz?cache=0&sync_timestamp=1576013709899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" + integrity sha1-uMKGQz6HYCMRsByOo0QT2Fakr4E= + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + husky@^2.3.0: version "2.7.0" resolved "https://registry.yarnpkg.com/husky/-/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05" @@ -1972,13 +3276,23 @@ husky@^2.3.0: run-node "^1.0.0" slash "^3.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +iferr@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/iferr/download/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" + integrity sha1-6f3kmp2gbcSkGUxsntbQgwUDem0= + ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" @@ -1991,7 +3305,7 @@ ignore@^4.0.6: resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1565775199290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= -ignore@^5.1.4: +ignore@^5.1.1, ignore@^5.1.4: version "5.1.4" resolved "https://registry.npm.taobao.org/ignore/download/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha1-hLez2+ZFUrbvDsqZ9nQ9vsbZet8= @@ -2012,6 +3326,26 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz?cache=0&sync_timestamp=1573665028675&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/import-from/download/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha1-BVz+w4zVon2AV8pRN219O/CJGWY= + dependencies: + resolve-from "^5.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -2030,7 +3364,17 @@ indent-string@^3.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= -inflight@^1.0.4: +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= + +inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -2038,16 +3382,49 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.npm.taobao.org/init-package-json/download/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha1-Rf/i9hCoyhNPK9HbVjeyNQcPbL4= + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +inquirer@6.5.0: + version "6.5.0" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha1-IwMxfvyaTqfsLi32+GVptzSsz0I= + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + inquirer@^7.0.0: version "7.0.0" resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" @@ -2067,6 +3444,19 @@ inquirer@^7.0.0: strip-ansi "^5.1.0" through "^2.3.6" +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/interpret/download/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY= + +into-stream@^5.0.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/into-stream/download/into-stream-5.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finto-stream%2Fdownload%2Finto-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" + integrity sha1-+aIKNIoR88E/rOInY/LQLhJ/Tbg= + dependencies: + from2 "^2.3.0" + p-is-promise "^3.0.0" + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -2079,7 +3469,12 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip@^1.1.5: +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -2113,6 +3508,13 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw= + dependencies: + ci-info "^1.5.0" + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -2120,6 +3522,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-cidr@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/is-cidr/download/is-cidr-3.1.0.tgz#72e233d8e1c4cd1d3f11713fcce3eba7b0e3476f" + integrity sha1-cuIz2OHEzR0/EXE/zOPrp7DjR28= + dependencies: + cidr-regex "^2.0.10" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -2208,6 +3617,19 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz?cache=0&sync_timestamp=1573231918408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-installed-globally%2Fdownload%2Fis-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -2215,7 +3637,12 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-obj@^1.0.1: +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -2246,6 +3673,11 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2253,11 +3685,23 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" + integrity sha1-R7/F2htdUNZBEIBsGZNZSC51qSg= + dependencies: + isobject "^4.0.0" + is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -2270,7 +3714,12 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-stream@^1.1.0: +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha1-13hIi9CkZmo76KFIK58rqv7eqLQ= + +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -2287,12 +3736,24 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-text-path/download/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-windows@^1.0.2: +is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -2302,6 +3763,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2324,11 +3790,27 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha1-PxyRVec7GSAiqAgZus0DQ3EWl7A= + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +issue-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/issue-parser/download/issue-parser-5.0.0.tgz#0e22a40bc275b6c7da6ddf4a9b979e8ca9faf0d4" + integrity sha1-DiKkC8J1tsfabd9Km5eejKn68NQ= + dependencies: + lodash.capitalize "^4.2.1" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.uniqby "^4.7.0" + istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" @@ -2374,6 +3856,11 @@ istanbul-reports@^2.1.1: dependencies: handlebars "^4.1.2" +java-properties@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/java-properties/download/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + integrity sha1-zNH6c5B0OKW1w4mCJp0Odx/nghE= + jest-changed-files@^24.8.0: version "24.8.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b" @@ -2786,7 +4273,7 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -2806,7 +4293,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -2818,6 +4305,18 @@ json5@2.x, json5@^2.1.0: dependencies: minimist "^1.2.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -2857,6 +4356,18 @@ kleur@^3.0.2: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + +lazy-property@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/lazy-property/download/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" + integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -2887,6 +4398,145 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libcipm@^4.0.7: + version "4.0.7" + resolved "https://registry.npm.taobao.org/libcipm/download/libcipm-4.0.7.tgz#76cd675c98bdaae64db88b782b01b804b6d02c8a" + integrity sha1-ds1nXJi9quZNuIt4KwG4BLbQLIo= + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.1" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + graceful-fs "^4.1.11" + ini "^1.3.5" + lock-verify "^2.0.2" + mkdirp "^0.5.1" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + pacote "^9.1.0" + read-package-json "^2.0.13" + rimraf "^2.6.2" + worker-farm "^1.6.0" + +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/libnpm/download/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha1-C+EbTJ3U0f/X2Vx4bpLlXWW+d6I= + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.3" + find-npm-prefix "^1.0.2" + libnpmaccess "^3.0.2" + libnpmconfig "^1.2.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + lock-verify "^2.0.2" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" + npmlog "^4.1.2" + pacote "^9.5.3" + read-package-json "^2.0.13" + stringify-package "^1.0.0" + +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/libnpmaccess/download/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha1-iy1yNFujvvkNO09pTt1cBBf1iSM= + dependencies: + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + +libnpmconfig@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/libnpmconfig/download/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha1-wML3k6dOZ9SCXlA556AqAETfy8A= + dependencies: + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" + +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.npm.taobao.org/libnpmhook/download/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha1-QCDA9e2/COvjlTJcql6gGIW5KPc= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/libnpmorg/download/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha1-XSUD9s61fzPb3McY5mmP6m1a0Ic= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmpublish@^1.1.2: + version "1.1.3" + resolved "https://registry.npm.taobao.org/libnpmpublish/download/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha1-43gnlnItee7xoKIpRMEX4MTKQoA= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + semver "^5.5.1" + ssri "^6.0.1" + +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/libnpmsearch/download/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha1-mk8FkQLTjj3UQIW9v+UJXypQRM8= + dependencies: + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/libnpmteam/download/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha1-i0i8u2znDdgVDJUPy9vz/rbuyCA= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.0: + version "10.2.0" + resolved "https://registry.npm.taobao.org/libnpx/download/libnpx-10.2.0.tgz#1bf4a1c9f36081f64935eb014041da10855e3102" + integrity sha1-G/ShyfNggfZJNesBQEHaEIVeMQI= + dependencies: + dotenv "^5.0.1" + npm-package-arg "^6.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.0" + update-notifier "^2.3.0" + which "^1.3.0" + y18n "^4.0.0" + yargs "^11.0.0" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + lint-staged@^8.1.7: version "8.2.1" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" @@ -2971,6 +4621,14 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -2986,26 +4644,134 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lock-verify@^2.0.2, lock-verify@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/lock-verify/download/lock-verify-2.1.0.tgz#fff4c918b8db9497af0c5fa7f6d71555de3ceb47" + integrity sha1-//TJGLjblJevDF+n9tcVVd4860c= + dependencies: + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/lockfile/download/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha1-B/gZ0lrkj4flOOZXi2lkpJgaVgk= + dependencies: + signal-exit "^3.0.2" + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/lodash._baseuniq/download/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/lodash._createset/download/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/lodash._root/download/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + +lodash.capitalize@^4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/lodash.capitalize/download/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= + +lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: + version "4.5.0" + resolved "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.npm.taobao.org/lodash.escaperegexp/download/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/lodash.ismatch/download/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.map@^4.5.1: + version "4.6.0" + resolved "https://registry.npm.taobao.org/lodash.map/download/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.npm.taobao.org/lodash.set/download/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/lodash.toarray/download/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.npm.taobao.org/lodash.unescape/download/lodash.unescape-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.unescape%2Fdownload%2Flodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -lodash@^4.17.11: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash.union@~4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/lodash.union/download/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: + version "4.5.0" + resolved "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash.uniqby@^4.7.0: + version "4.7.0" + resolved "https://registry.npm.taobao.org/lodash.uniqby/download/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= + +lodash.without@~4.4.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@^4.17.14, lodash@^4.17.15: +lodash@4.17.14: + version "4.17.14" + resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha1-nOSHrmbJYlT+ILWZ8htoFgKAeLo= + +lodash@4.17.15, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" @@ -3034,6 +4800,11 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" +longest@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/longest/download/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -3041,6 +4812,46 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= + dependencies: + yallist "^3.0.2" + +macos-release@^2.2.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/macos-release/download/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" + integrity sha1-6xkwsDbAgArevM1fF7xMEt6Ltx8= + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= + dependencies: + pify "^3.0.0" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -3054,6 +4865,23 @@ make-error@1.x: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1573744901330&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha1-qoOHEE8mh+3KAchofuRQE9AtGb0= + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -3073,6 +4901,16 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -3080,6 +4918,23 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +marked-terminal@^3.2.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/marked-terminal/download/marked-terminal-3.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarked-terminal%2Fdownload%2Fmarked-terminal-3.3.0.tgz#25ce0c0299285998c7636beaefc87055341ba1bd" + integrity sha1-Jc4MApkoWZjHY2vq78hwVTQbob0= + dependencies: + ansi-escapes "^3.1.0" + cardinal "^2.1.1" + chalk "^2.4.1" + cli-table "^0.3.1" + node-emoji "^1.4.1" + supports-hyperlinks "^1.0.1" + +marked@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/marked/download/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" + integrity sha1-tkIB8FHScbHtwQoE0a6bdLuOXA4= + matcher@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" @@ -3087,6 +4942,11 @@ matcher@^1.0.0: dependencies: escape-string-regexp "^1.0.4" +meant@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/meant/download/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" + integrity sha1-ZgRP6i8jIw7IBvtRXv6inETSEV0= + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -3096,6 +4956,21 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/meow/download/meow-5.0.0.tgz?cache=0&sync_timestamp=1575730464003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ= + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -3108,7 +4983,17 @@ merge-stream@^2.0.0: resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +merge2@^1.2.3, merge2@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha1-WzZu6DsvFYLEj4fkfPGpNSEDyoE= + +merge@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/merge/download/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU= + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -3127,6 +5012,14 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.0, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk= + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" @@ -3139,6 +5032,11 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.40.0" +mime@^2.4.3: + version "2.4.4" + resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha1-vXuRE1/GsBzePpuuM9ZZtj2IV+U= + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -3156,12 +5054,20 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.npm.taobao.org/minimist-options/download/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ= + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.1, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -3179,6 +5085,14 @@ minipass@^2.2.1, minipass@^2.3.5: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^2.8.6: + version "2.9.0" + resolved "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz?cache=0&sync_timestamp=1571953917221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY= + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + minizlib@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" @@ -3186,6 +5100,22 @@ minizlib@^1.2.1: dependencies: minipass "^2.2.1" +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -3194,13 +5124,30 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/modify-values/download/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha1-s5OfpgVUZHTj4+PGPWS9Q7TuYCI= + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + mri@^1.1.4: version "1.1.4" resolved "https://registry.npm.taobao.org/mri/download/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" @@ -3211,7 +5158,7 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -3227,7 +5174,12 @@ multimatch@^4.0.0: arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@0.0.8: +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= @@ -3273,11 +5225,54 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +nerf-dart@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/nerf-dart/download/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" + integrity sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-emoji@^1.4.1: + version "1.10.0" + resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= + dependencies: + lodash.toarray "^4.4.0" + +node-fetch-npm@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" + integrity sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c= + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.3.0: + version "2.6.0" + resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha1-5jNFY4bUqlWGP2dqerDaqP3ssP0= + +node-gyp@^5.0.2, node-gyp@^5.0.5: + version "5.0.5" + resolved "https://registry.npm.taobao.org/node-gyp/download/node-gyp-5.0.5.tgz?cache=0&sync_timestamp=1572603536473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-5.0.5.tgz#f6cf1da246eb8c42b097d7cd4d6c3ce23a4163af" + integrity sha1-9s8dokbrjEKwl9fNTWw84jpBY68= + dependencies: + env-paths "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^4.4.12" + which "1" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -3315,7 +5310,14 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -nopt@^4.0.1: +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +nopt@^4.0.1, nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= @@ -3323,7 +5325,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -3340,11 +5342,78 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-url@^4.0.0: + version "4.5.0" + resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha1-RTNUCH5sqWlXvY9br3U/WYIUISk= + +npm-audit-report@^1.3.2: + version "1.3.2" + resolved "https://registry.npm.taobao.org/npm-audit-report/download/npm-audit-report-1.3.2.tgz#303bc78cd9e4c226415076a4f7e528c89fc77018" + integrity sha1-MDvHjNnkwiZBUHak9+UoyJ/HcBg= + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/npm-cache-filename/download/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= + +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/npm-install-checks/download/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha1-qy4yrSe6pGcgcGkI5bFMGFLeRNk= + dependencies: + semver "^2.3.0 || 3.x || 4 || 5" + +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: + version "3.1.4" + resolved "https://registry.npm.taobao.org/npm-lifecycle/download/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" + integrity sha1-3ml1x9jfZfUVDbEQtXzOSYsLYEw= + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-logical-tree@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/npm-logical-tree/download/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" + integrity sha1-RGEBQcokZkytNdHmBxdhk/2PW4g= + +npm-normalize-package-bin@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI= + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz?cache=0&sync_timestamp=1573444510217&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-package-arg%2Fdownload%2Fnpm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc= + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12, npm-packlist@^1.4.7: + version "1.4.7" + resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" + integrity sha1-npVDZaBrgLGBEeqQCUWvT4jtSEg= + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-packlist@^1.1.6: version "1.4.4" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" @@ -3360,6 +5429,37 @@ npm-path@^2.0.2: dependencies: which "^1.2.10" +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c= + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-profile@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/npm-profile/download/npm-profile-4.0.2.tgz#8272a71c19634d0dce9c35a5daf8ee589cbb0f52" + integrity sha1-gnKnHBljTQ3OnDWl2vjuWJy7D1I= + dependencies: + aproba "^1.1.2 || 2" + figgy-pudding "^3.4.1" + npm-registry-fetch "^4.0.0" + +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.2.tgz?cache=0&sync_timestamp=1573444860060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-registry-fetch%2Fdownload%2Fnpm-registry-fetch-4.0.2.tgz#2b1434f93ccbe6b6385f8e45f45db93e16921d7a" + integrity sha1-KxQ0+TzL5rY4X45F9F25PhaSHXo= + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -3374,6 +5474,18 @@ npm-run-path@^3.0.0: dependencies: path-key "^3.0.0" +npm-run-path@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.0.tgz?cache=0&sync_timestamp=1571055877165&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.0.tgz#d644ec1bd0569187d2a52909971023a0a58e8438" + integrity sha1-1kTsG9BWkYfSpSkJlxAjoKWOhDg= + dependencies: + path-key "^3.0.0" + +npm-user-validate@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/npm-user-validate/download/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" + integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= + npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" @@ -3383,7 +5495,128 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npmlog@^4.0.2: +npm@^6.10.3: + version "6.13.4" + resolved "https://registry.npm.taobao.org/npm/download/npm-6.13.4.tgz?cache=0&sync_timestamp=1576091371724&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm%2Fdownload%2Fnpm-6.13.4.tgz#1e95b0f311999cf682384c38865dfeb3127203bb" + integrity sha1-HpWw8xGZnPaCOEw4hl3+sxJyA7s= + dependencies: + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" + archy "~1.0.0" + bin-links "^1.1.6" + bluebird "^3.5.5" + byte-size "^5.0.1" + cacache "^12.0.3" + call-limit "^1.1.1" + chownr "^1.1.3" + ci-info "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + columnify "~1.5.4" + config-chain "^1.1.12" + detect-indent "~5.0.0" + detect-newline "^2.1.0" + dezalgo "~1.0.3" + editor "~1.0.0" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + fs-vacuum "~1.2.10" + fs-write-stream-atomic "~1.0.10" + gentle-fs "^2.3.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + has-unicode "~2.0.1" + hosted-git-info "^2.8.5" + iferr "^1.0.2" + infer-owner "^1.0.4" + inflight "~1.0.6" + inherits "^2.0.4" + ini "^1.3.5" + init-package-json "^1.10.3" + is-cidr "^3.0.0" + json-parse-better-errors "^1.0.2" + lazy-property "~1.0.0" + libcipm "^4.0.7" + libnpm "^3.0.1" + libnpmaccess "^3.0.2" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + libnpx "^10.2.0" + lock-verify "^2.1.0" + lockfile "^1.0.4" + lodash._baseuniq "~4.6.0" + lodash.clonedeep "~4.5.0" + lodash.union "~4.6.0" + lodash.uniq "~4.5.0" + lodash.without "~4.4.0" + lru-cache "^5.1.1" + meant "~1.0.1" + mississippi "^3.0.0" + mkdirp "~0.5.1" + move-concurrently "^1.0.1" + node-gyp "^5.0.5" + nopt "~4.0.1" + normalize-package-data "^2.5.0" + npm-audit-report "^1.3.2" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.4" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.7" + npm-pick-manifest "^3.0.2" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.2" + npm-user-validate "~1.0.0" + npmlog "~4.1.2" + once "~1.4.0" + opener "^1.5.1" + osenv "^0.1.5" + pacote "^9.5.11" + path-is-inside "~1.0.2" + promise-inflight "~1.0.1" + qrcode-terminal "^0.12.0" + query-string "^6.8.2" + qw "~1.0.1" + read "~1.0.7" + read-cmd-shim "^1.0.5" + read-installed "~4.0.3" + read-package-json "^2.1.1" + read-package-tree "^5.3.1" + readable-stream "^3.4.0" + readdir-scoped-modules "^1.1.0" + request "^2.88.0" + retry "^0.12.0" + rimraf "^2.6.3" + safe-buffer "^5.1.2" + semver "^5.7.1" + sha "^3.0.0" + slide "~1.1.6" + sorted-object "~2.0.1" + sorted-union-stream "~2.1.3" + ssri "^6.0.1" + stringify-package "^1.0.1" + tar "^4.4.13" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + uid-number "0.0.6" + umask "~1.1.0" + unique-filename "^1.1.1" + unpipe "~1.0.0" + update-notifier "^2.5.0" + uuid "^3.3.3" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.3" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -3449,7 +5682,12 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/octokit-pagination-methods/download/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha1-z0cu3J1VEFX573P25CtNu0yAvqQ= + +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -3470,6 +5708,11 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0= + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -3495,7 +5738,7 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^3.0.0: +os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== @@ -3504,12 +5747,20 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/os-name/download/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha1-3sGdlmKW4c1i1wGlpm7h3ernCAE= + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: +osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -3529,6 +5780,13 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" +p-filter@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-filter/download/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha1-GxRyVirnoPdC8PPT03GOpm/5wJw= + dependencies: + p-map "^2.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -3544,6 +5802,18 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== +p-is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha1-WOeMff4uFjzyoE/4aefB26ZKWXE= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= + dependencies: + p-try "^1.0.0" + p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" @@ -3551,6 +5821,13 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -3558,7 +5835,7 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-locate@^4.1.0: +p-locate@^4.0.0, p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== @@ -3580,11 +5857,84 @@ p-reduce@^1.0.0: resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-reduce@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha1-CUCNpJUHxsJ0+qMfKN8zS8cStko= + +p-retry@^4.0.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/p-retry/download/p-retry-4.2.0.tgz#ea9066c6b44f23cab4cd42f6147cdbbc6604da5d" + integrity sha1-6pBmxrRPI8q0zUL2FHzbvGYE2l0= + dependencies: + "@types/retry" "^0.12.0" + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pacote@^9.1.0, pacote@^9.5.11, pacote@^9.5.3: + version "9.5.11" + resolved "https://registry.npm.taobao.org/pacote/download/pacote-9.5.11.tgz#524152077cb392c47b1fbe198aa28f778bef7ee1" + integrity sha1-UkFSB3yzksR7H74ZiqKPd4vvfuE= + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparallel-transform%2Fdownload%2Fparallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3600,6 +5950,21 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha1-c+URTJhtFD76NxLU6iTbmkJm9g8= + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" @@ -3625,7 +5990,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -3652,11 +6017,21 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.5: + version "2.1.1" + resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" + integrity sha1-7N++p3BK21/m+0f5hmxMDhXpBcU= + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3691,6 +6066,14 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/pkg-conf/download/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -3727,6 +6110,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -3771,6 +6159,19 @@ progress@^2.0.0: resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= +promise-inflight@^1.0.1, promise-inflight@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + prompts@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db" @@ -3779,16 +6180,53 @@ prompts@^2.0.1: kleur "^3.0.2" sisteransi "^1.0.0" +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/promzard/download/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + property-expr@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/protoduck/download/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8= + dependencies: + genfun "^5.0.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + psl@^1.1.24, psl@^1.1.28: version "1.2.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -3797,6 +6235,15 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz?cache=0&sync_timestamp=1569938104994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpumpify%2Fdownload%2Fpumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -3807,12 +6254,41 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.5.1: + version "1.5.1" + resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/qrcode-terminal/download/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha1-u1tpnvf58FBQkqN0i+RGT+cbWBk= + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -rc@^1.2.7: +query-string@^6.8.2: + version "6.9.0" + resolved "https://registry.npm.taobao.org/query-string/download/query-string-6.9.0.tgz#1c3b727c370cf00f177c99f328fda2108f8fa3dd" + integrity sha1-HDtyfDcM8A8XfJnzKP2iEI+Po90= + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +qw@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/qw/download/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" + integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -3827,6 +6303,56 @@ react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/read-cmd-shim/download/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha1-h+Q+ulAJi6WjLQzrWDq45DuWHBY= + dependencies: + graceful-fs "^4.1.2" + +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/read-installed/download/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha1-FqpmxZ59Ta1iiPF53ZKV/Vm7mPE= + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY= + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -3835,6 +6361,15 @@ read-pkg-up@^4.0.0: find-up "^3.0.0" read-pkg "^3.0.0" +read-pkg-up@^7.0.0: + version "7.0.1" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc= + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -3844,6 +6379,16 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +read-pkg@^5.0.0, read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w= + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + read-pkg@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" @@ -3854,7 +6399,14 @@ read-pkg@^5.1.1: parse-json "^4.0.0" type-fest "^0.4.1" -readable-stream@^2.0.1, readable-stream@^2.0.6: +read@1, read@~1.0.1, read@~1.0.7: + version "1.0.7" + resolved "https://registry.npm.taobao.org/read/download/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -3867,6 +6419,35 @@ readable-stream@^2.0.1, readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +"readable-stream@2 || 3", readable-stream@^3.4.0: + version "3.4.0" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha1-pRwmdUZY4KPCHb9ZFjvUW6b0R/w= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.1.10: + version "1.1.14" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha1-jUVAe0+HCg3K68DihnDRjnRRQwk= + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -3874,6 +6455,33 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/redent/download/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/redeyed/download/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= + dependencies: + esprima "~4.0.0" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk= + regenerator-runtime@^0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" @@ -3892,6 +6500,29 @@ regexpp@^2.0.1: resolved "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8= +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha1-10RoFUM/XV7WQxzV3KIQSPZrOX4= + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-auth-token@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" + integrity sha1-MOVZYe7Hc3naVR6lxM9Dy/A1Ir4= + dependencies: + rc "^1.2.8" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3923,7 +6554,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.86.0, request@^2.87.0: +request@^2.86.0, request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -3971,6 +6602,14 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/resolve-dir/download/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -3981,6 +6620,18 @@ resolve-from@^4.0.0: resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= + +resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/resolve-global/download/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha1-oqed9K8so/Sb93753azTItrRklU= + dependencies: + global-dirs "^0.1.1" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -3998,6 +6649,13 @@ resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +resolve@^1.1.6: + version "1.13.1" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" + integrity sha1-vgqkwGrNUwg1BauzX01mkyqzXRY= + dependencies: + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -4019,6 +6677,33 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= + +right-pad@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/right-pad/download/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" + integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= + +rimraf@2, rimraf@^2.5.2: + version "2.7.1" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + dependencies: + glob "^7.1.3" + rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -4043,6 +6728,18 @@ run-node@^1.0.0: resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk= + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + rxjs@^6.3.3: version "6.5.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" @@ -4057,7 +6754,7 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.2: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -4099,16 +6796,65 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +semantic-release@^15.13.31: + version "15.13.31" + resolved "https://registry.npm.taobao.org/semantic-release/download/semantic-release-15.13.31.tgz#75560e61562b5b7aa3e66256fd3454683c6508a6" + integrity sha1-dVYOYVYrW3qj5mJW/TRUaDxlCKY= + dependencies: + "@semantic-release/commit-analyzer" "^6.1.0" + "@semantic-release/error" "^2.2.0" + "@semantic-release/github" "^5.1.0" + "@semantic-release/npm" "^5.0.5" + "@semantic-release/release-notes-generator" "^7.1.2" + aggregate-error "^3.0.0" + cosmiconfig "^6.0.0" + debug "^4.0.0" + env-ci "^4.0.0" + execa "^3.2.0" + figures "^3.0.0" + find-versions "^3.0.0" + get-stream "^5.0.0" + git-log-parser "^1.2.0" + hook-std "^2.0.0" + hosted-git-info "^3.0.0" + lodash "^4.17.15" + marked "^0.7.0" + marked-terminal "^3.2.0" + p-locate "^4.0.0" + p-reduce "^2.0.0" + read-pkg-up "^7.0.0" + resolve-from "^5.0.0" + semver "^6.0.0" + signale "^1.2.1" + yargs "^15.0.1" + semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz?cache=0&sync_timestamp=1571064474000&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver-diff%2Fdownload%2Fsemver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg= + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +"semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.5.1, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + semver@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" @@ -4119,6 +6865,11 @@ semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -4134,6 +6885,13 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" +sha@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/sha/download/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" + integrity sha1-svL5CvaQwWo6g5pqbGgOpR/t0a4= + dependencies: + graceful-fs "^4.1.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -4158,6 +6916,15 @@ shebang-regex@^3.0.0: resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= +shelljs@0.7.6: + version "0.7.6" + resolved "https://registry.npm.taobao.org/shelljs/download/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" + integrity sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -4168,6 +6935,15 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signale@^1.2.1: + version "1.4.0" + resolved "https://registry.npm.taobao.org/signale/download/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha1-xL5YMC+wJirAD8PYhqfBE3WQQvE= + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + simple-git@^1.85.0: version "1.118.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.118.0.tgz#6e31d50672c58abdbdb0410fadfdb1db29bd71bd" @@ -4204,6 +6980,16 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.npm.taobao.org/slide/download/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha1-kWBcJdkWUvRmHqacz0XxszHKIbo= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -4234,6 +7020,35 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y= + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz?cache=0&sync_timestamp=1573090532880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM= + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sorted-object@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/sorted-object/download/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= + +sorted-union-stream@~2.1.3: + version "2.1.3" + resolved "https://registry.npm.taobao.org/sorted-union-stream/download/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" + integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= + dependencies: + from2 "^1.3.0" + stream-iterate "^1.1.0" + source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -4268,6 +7083,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spawn-error-forwarder@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/spawn-error-forwarder/download/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" + integrity sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -4294,6 +7114,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/split-on-first/download/split-on-first-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit-on-first%2Fdownload%2Fsplit-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha1-9hCv7uOxK84dDDBCXnY5i3gkml8= + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -4301,6 +7126,27 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/split2/download/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha1-GGsldbz4PoW30YRldWI47k7kJJM= + dependencies: + through2 "^2.0.2" + +split2@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/split2/download/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" + integrity sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= + dependencies: + through2 "~2.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/split/download/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k= + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4321,6 +7167,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz?cache=0&sync_timestamp=1571961736774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg= + dependencies: + figgy-pudding "^3.5.1" + stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -4344,6 +7197,40 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-combiner2@~1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/stream-combiner2/download/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-iterate@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/stream-iterate/download/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" + integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= + dependencies: + readable-stream "^2.1.5" + stream-shift "^1.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" @@ -4366,7 +7253,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -4392,6 +7279,27 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^5.2.0" +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4408,6 +7316,11 @@ stringify-object@^3.2.2: is-obj "^1.0.1" is-regexp "^1.0.0" +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/stringify-package/download/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha1-5ao2Q+f3TQ8oYoty89rVzs/DuoU= + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -4429,6 +7342,18 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= + dependencies: + ansi-regex "^5.0.0" + +strip-bom@4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg= + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -4444,7 +7369,12 @@ strip-final-newline@^2.0.0: resolved "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= -strip-json-comments@^3.0.1: +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@3.0.1, strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha1-hXE5dakfuHvxswXMp3OV5A0qZKc= @@ -4459,7 +7389,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^5.0.0, supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -4473,6 +7403,14 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-hyperlinks@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" + integrity sha1-cdrt82zBBgrFEAw1G7PaSMKcDvc= + dependencies: + has-flag "^2.0.0" + supports-color "^5.0.0" + symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -4511,6 +7449,40 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: + version "4.4.13" + resolved "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz?cache=0&sync_timestamp=1570286254496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU= + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/temp-dir/download/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempy@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/tempy/download/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha1-b2xbKVaVoWEwmWrVqwGovXJui/g= + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -4521,7 +7493,12 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" -text-table@^0.2.0: +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY= + +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -4531,11 +7508,36 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through@^2.3.6: +through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/through2/download/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" + integrity sha1-OSducTwzAu3544jdnIEt07glvVo= + dependencies: + readable-stream "2 || 3" + +through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/tiny-relative-date/download/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha1-+giq1QHtcw8xzAQxgdmVw5qTXgc= + tmp@^0.0.33: version "0.0.33" resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -4568,6 +7570,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -4606,6 +7615,21 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +traverse@~0.6.6: + version "0.6.6" + resolved "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/trim-off-newlines/download/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -4683,6 +7707,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha1-Y9ANIE4FlHT+Xht8ARESu9HcKeE= + type-fest@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" @@ -4693,6 +7722,21 @@ type-fest@^0.5.2: resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" integrity sha1-1u9CoDVsbNRfSUhcO2KB/BSOSKI= +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + typescript@^3.7.2: version "3.7.2" resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.7.2.tgz?cache=0&sync_timestamp=1572971428838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" @@ -4706,6 +7750,16 @@ uglify-js@^3.1.4: commander "~2.20.0" source-map "~0.6.1" +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0, umask@~1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/umask/download/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -4716,6 +7770,44 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universal-user-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/universal-user-agent/download/universal-user-agent-4.0.0.tgz#27da2ec87e32769619f68a14996465ea1cb9df16" + integrity sha1-J9ouyH4ydpYZ9ooUmWRl6hy53xY= + dependencies: + os-name "^3.1.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -4724,6 +7816,27 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +update-notifier@^2.3.0, update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -4736,16 +7849,40 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-join@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/url-join/download/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha1-tkLiGiZGgI/6F4xMX9o5hE4Szec= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/util-extend/download/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/util-promisify/download/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + util.promisify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -4759,12 +7896,17 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@^3.3.3: + version "3.3.3" + resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY= + v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha1-4U3jezGm0ZT1aQ1n78Tn9vxqsw4= -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -4772,6 +7914,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -4795,6 +7944,13 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -4835,7 +7991,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.10, which@^1.2.9, which@^1.3.0: +which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -4856,6 +8012,25 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w= + dependencies: + string-width "^2.1.1" + +windows-release@^3.1.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/windows-release/download/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" + integrity sha1-gSLa1a/DA9gzQiOAaAp5zfqReF8= + dependencies: + execa "^1.0.0" + +word-wrap@^1.0.3: + version "1.2.3" + resolved "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha1-YQY29rH3A4kb00dxzLF/uTtHB5w= + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -4866,6 +8041,13 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +worker-farm@^1.6.0, worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= + dependencies: + errno "~0.1.7" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -4882,6 +8064,15 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1573488536792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -4896,6 +8087,15 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: + version "2.4.3" + resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write@1.0.3: version "1.0.3" resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz?cache=0&sync_timestamp=1567579932525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite%2Fdownload%2Fwrite-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" @@ -4910,22 +8110,54 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -"y18n@^3.2.1 || ^4.0.0": +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs-parser@10.x: +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + +yaml@^1.7.2: + version "1.7.2" + resolved "https://registry.npm.taobao.org/yaml/download/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" + integrity sha1-8mqr9zhZCrYe+spQI1jkjcnzSLI= + dependencies: + "@babel/runtime" "^7.6.3" + +yargs-parser@10.x, yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== @@ -4940,6 +8172,39 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^16.1.0: + version "16.1.0" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" + integrity sha1-c3R9U64YfnuNvjM/lXFMduoA7PE= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha1-UFLv40RqTfXtZpyZWIbMDxNwJ2Y= + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + yargs@^12.0.2: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -4958,6 +8223,23 @@ yargs@^12.0.2: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" +yargs@^15.0.1: + version "15.0.2" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-15.0.2.tgz#4248bf218ef050385c4f7e14ebdf425653d13bd3" + integrity sha1-Qki/IY7wUDhcT34U699CVlPRO9M= + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^16.1.0" + yup@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" From 968372c49dfa4e9d8a94a1b2d2aa750b020fa7a1 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 15 Dec 2019 21:40:17 +0800 Subject: [PATCH 305/497] ci: remove nodejs@8 --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 416ee8a1..730f6f99 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ language: node_js sudo: false node_js: - - '8' - '10' - '11' - '12' From 584624c99eabca68fc790d66fc4737511d92b074 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 14 Jan 2020 23:09:00 +0800 Subject: [PATCH 306/497] fix: getImplicitPermissionsForUser missing domain parameter --- src/enforcer.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 6421e9a4..2e1262b5 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -302,11 +302,16 @@ export class Enforcer extends ManagementEnforcer { * getPermissionsForUser("alice") can only get: [["alice", "data2", "read"]]. * But getImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]]. */ - public async getImplicitPermissionsForUser(user: string): Promise { - const roles = [user, ...(await this.getImplicitRolesForUser(user))]; + public async getImplicitPermissionsForUser(user: string, ...domain: string[]): Promise { + const roles = [user, ...(await this.getImplicitRolesForUser(user, ...domain))]; const res: string[][] = []; + const withDomain = domain && domain.length !== 0; roles.forEach(n => { - res.push(...this.getPermissionsForUser(n)); + if (withDomain) { + res.push(...this.getFilteredPolicy(0, n, ...domain)); + } else { + res.push(...this.getPermissionsForUser(n)); + } }); return res; } From ab93a92ac2fc7835045587c8f303bf6090b67179 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 14 Jan 2020 15:18:26 +0000 Subject: [PATCH 307/497] chore(release): 3.0.9 [skip ci] ## [3.0.9](https://github.com/casbin/node-casbin/compare/v3.0.8...v3.0.9) (2020-01-14) ### Bug Fixes * getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/node-casbin/commit/584624c99eabca68fc790d66fc4737511d92b074)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4225ee02..678f1fb1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "0.0.0-development", + "version": "3.0.9", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 0ace1a66a36d5fe3ada37bfaaa938b84fc001c58 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 21 Jan 2020 22:46:10 +0800 Subject: [PATCH 308/497] feat: implementation cachedEnforcer --- package.json | 2 +- src/cachedEnforcer.ts | 66 +++++++++++++++++++++++++++++++++++++ src/enforcer.ts | 40 ++++++++++++---------- src/index.ts | 1 + test/cachedEnforcer.test.ts | 25 ++++++++++++++ 5 files changed, 115 insertions(+), 19 deletions(-) create mode 100644 src/cachedEnforcer.ts create mode 100644 test/cachedEnforcer.test.ts diff --git a/package.json b/package.json index 678f1fb1..4225ee02 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.0.9", + "version": "0.0.0-development", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", diff --git a/src/cachedEnforcer.ts b/src/cachedEnforcer.ts new file mode 100644 index 00000000..7aac596d --- /dev/null +++ b/src/cachedEnforcer.ts @@ -0,0 +1,66 @@ +import { Enforcer, newEnforcerWithClass } from './enforcer'; + +// CachedEnforcer wraps Enforcer and provides decision cache +export class CachedEnforcer extends Enforcer { + private enableCache = true; + private m = new Map(); + + // invalidateCache deletes all the existing cached decisions. + public invalidateCache(): void { + this.m = new Map(); + } + + // setEnableCache determines whether to enable cache on e nforce(). When enableCache is enabled, cached result (true | false) will be returned for previous decisions. + public setEnableCache(enableCache: boolean): void { + this.enableCache = enableCache; + } + + private static canCache(...rvals: any[]): boolean { + return rvals.every(n => typeof n === 'string'); + } + + private static getCacheKey(...rvals: string[]): string { + return rvals.join('$$'); + } + + private getCache(key: string): boolean | undefined { + return this.m.get(key); + } + + private setCache(key: string, value: boolean): void { + this.m.set(key, value); + } + + // enforce decides whether a "subject" can access a "object" with the operation "action", input parameters are usually: (sub, obj, act). + // if rvals is not string , ingore the cache + public async enforce(...rvals: any[]): Promise { + if (!this.enableCache) { + return super.enforce(...rvals); + } + + let key = ''; + const cache = CachedEnforcer.canCache(...rvals); + + if (cache) { + key = CachedEnforcer.getCacheKey(...rvals); + const res = this.getCache(key); + + if (res != undefined) { + return res; + } + } + + const res = await super.enforce(...rvals); + + if (cache) { + this.setCache(key, res); + } + + return res; + } +} + +// newCachedEnforcer creates a cached enforcer via file or DB. +export async function newCachedEnforcer(...params: any[]): Promise { + return newEnforcerWithClass(CachedEnforcer, ...params); +} diff --git a/src/enforcer.ts b/src/enforcer.ts index 2e1262b5..33087f4b 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -317,24 +317,8 @@ export class Enforcer extends ManagementEnforcer { } } -/** - * newEnforcer creates an enforcer via file or DB. - * - * File: - * ```js - * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); - * ``` - * - * MySQL DB: - * ```js - * const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); - * const e = new Enforcer('path/to/basic_model.conf', a); - * ``` - * - * @param params - */ -export async function newEnforcer(...params: any[]): Promise { - const e = new Enforcer(); +export async function newEnforcerWithClass(enforcer: new () => T, ...params: any[]): Promise { + const e = new enforcer(); let parsedParamLen = 0; if (params.length >= 1) { @@ -373,3 +357,23 @@ export async function newEnforcer(...params: any[]): Promise { return e; } + +/** + * newEnforcer creates an enforcer via file or DB. + * + * File: + * ```js + * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); + * ``` + * + * MySQL DB: + * ```js + * const a = new MySQLAdapter('mysql', 'mysql_username:mysql_password@tcp(127.0.0.1:3306)/'); + * const e = new Enforcer('path/to/basic_model.conf', a); + * ``` + * + * @param params + */ +export async function newEnforcer(...params: any[]): Promise { + return newEnforcerWithClass(Enforcer, ...params); +} diff --git a/src/index.ts b/src/index.ts index b97fa067..3c84ee36 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,6 +16,7 @@ import * as Util from './util'; export * from './config'; export * from './enforcer'; +export * from './cachedEnforcer'; export * from './effect'; export * from './model'; export * from './persist'; diff --git a/test/cachedEnforcer.test.ts b/test/cachedEnforcer.test.ts new file mode 100644 index 00000000..75c2fc17 --- /dev/null +++ b/test/cachedEnforcer.test.ts @@ -0,0 +1,25 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Enforcer, newCachedEnforcer } from '../src'; + +async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): Promise { + await expect(e.enforce(sub, obj, act)).resolves.toBe(res); +} + +test('TestRBACModel', async () => { + const e = await newCachedEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + + await testEnforce(e, 'alice', 'data1', 'read', true); +}); From 8d9b260452500c7045cdb807beb986691c6b3f69 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 22 Jan 2020 08:28:59 +0000 Subject: [PATCH 309/497] chore(release): 3.1.0 [skip ci] # [3.1.0](https://github.com/casbin/node-casbin/compare/v3.0.9...v3.1.0) (2020-01-22) ### Features * implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/node-casbin/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4225ee02..cef581ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "0.0.0-development", + "version": "3.1.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 516841fa6d54f8996dbf584aa6015d19b5b39102 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 10 Feb 2020 19:54:42 +0800 Subject: [PATCH 310/497] style: copyright claim --- src/cachedEnforcer.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/cachedEnforcer.ts b/src/cachedEnforcer.ts index 7aac596d..508a2389 100644 --- a/src/cachedEnforcer.ts +++ b/src/cachedEnforcer.ts @@ -1,3 +1,17 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import { Enforcer, newEnforcerWithClass } from './enforcer'; // CachedEnforcer wraps Enforcer and provides decision cache From e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 11 Feb 2020 17:17:16 +0800 Subject: [PATCH 311/497] improvement: convert all management_api to async function BREAKING CHANGE: see # --- src/enforcer.ts | 54 +++++++++++++++++---------------- src/managementEnforcer.ts | 61 +++++++++++++++++++------------------ test/enforcer.test.ts | 6 ++-- test/managementAPI.test.ts | 62 +++++++++++++++++++------------------- 4 files changed, 94 insertions(+), 89 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 33087f4b..56924519 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -84,9 +84,9 @@ export class Enforcer extends ManagementEnforcer { */ public async getRolesForUser(name: string, domain?: string): Promise { if (domain == null) { - return await this.rm.getRoles(name); + return this.rm.getRoles(name); } else { - return await this.rm.getRoles(name, domain); + return this.rm.getRoles(name, domain); } } @@ -99,9 +99,9 @@ export class Enforcer extends ManagementEnforcer { */ public async getUsersForRole(name: string, domain?: string): Promise { if (domain == null) { - return await this.rm.getUsers(name); + return this.rm.getUsers(name); } else { - return await this.rm.getUsers(name, domain); + return this.rm.getUsers(name, domain); } } @@ -137,9 +137,9 @@ export class Enforcer extends ManagementEnforcer { */ public async addRoleForUser(user: string, role: string, domain?: string): Promise { if (domain == null) { - return await this.addGroupingPolicy(user, role); + return this.addGroupingPolicy(user, role); } else { - return await this.addGroupingPolicy(user, role, domain); + return this.addGroupingPolicy(user, role, domain); } } @@ -154,9 +154,9 @@ export class Enforcer extends ManagementEnforcer { */ public async deleteRoleForUser(user: string, role: string, domain?: string): Promise { if (domain == null) { - return await this.removeGroupingPolicy(user, role); + return this.removeGroupingPolicy(user, role); } else { - return await this.removeGroupingPolicy(user, role, domain); + return this.removeGroupingPolicy(user, role, domain); } } @@ -170,9 +170,9 @@ export class Enforcer extends ManagementEnforcer { */ public async deleteRolesForUser(user: string, domain?: string): Promise { if (domain == null) { - return await this.removeFilteredGroupingPolicy(0, user); + return this.removeFilteredGroupingPolicy(0, user); } else { - return await this.removeFilteredGroupingPolicy(0, user, '', domain); + return this.removeFilteredGroupingPolicy(0, user, '', domain); } } @@ -184,7 +184,7 @@ export class Enforcer extends ManagementEnforcer { * @return succeeds or not. */ public async deleteUser(user: string): Promise { - return await this.removeFilteredGroupingPolicy(0, user); + return this.removeFilteredGroupingPolicy(0, user); } /** @@ -207,7 +207,7 @@ export class Enforcer extends ManagementEnforcer { * @return succeeds or not. */ public async deletePermission(...permission: string[]): Promise { - return await this.removeFilteredPolicy(1, ...permission); + return this.removeFilteredPolicy(1, ...permission); } /** @@ -220,7 +220,7 @@ export class Enforcer extends ManagementEnforcer { */ public async addPermissionForUser(user: string, ...permission: string[]): Promise { permission.unshift(user); - return await this.addPolicy(...permission); + return this.addPolicy(...permission); } /** @@ -233,7 +233,7 @@ export class Enforcer extends ManagementEnforcer { */ public async deletePermissionForUser(user: string, ...permission: string[]): Promise { permission.unshift(user); - return await this.removePolicy(...permission); + return this.removePolicy(...permission); } /** @@ -244,7 +244,7 @@ export class Enforcer extends ManagementEnforcer { * @return succeeds or not. */ public async deletePermissionsForUser(user: string): Promise { - return await this.removeFilteredPolicy(0, user); + return this.removeFilteredPolicy(0, user); } /** @@ -253,7 +253,7 @@ export class Enforcer extends ManagementEnforcer { * @param user the user. * @return the permissions, a permission is usually like (obj, act). It is actually the rule without the subject. */ - public getPermissionsForUser(user: string): string[][] { + public async getPermissionsForUser(user: string): Promise { return this.getFilteredPolicy(0, user); } @@ -264,7 +264,7 @@ export class Enforcer extends ManagementEnforcer { * @param permission the permission, usually be (obj, act). It is actually the rule without the subject. * @return whether the user has the permission. */ - public hasPermissionForUser(user: string, ...permission: string[]): boolean { + public async hasPermissionForUser(user: string, ...permission: string[]): Promise { permission.unshift(user); return this.hasPolicy(...permission); } @@ -283,11 +283,11 @@ export class Enforcer extends ManagementEnforcer { const res: string[] = []; const roles = await this.rm.getRoles(name, ...domain); res.push(...roles); - await Promise.all( - roles.map(async n => { - res.push(...(await this.getImplicitRolesForUser(n, ...domain))); - }) - ); + + for (const n of roles) { + res.push(...(await this.getImplicitRolesForUser(n, ...domain))); + } + return res; } @@ -306,13 +306,15 @@ export class Enforcer extends ManagementEnforcer { const roles = [user, ...(await this.getImplicitRolesForUser(user, ...domain))]; const res: string[][] = []; const withDomain = domain && domain.length !== 0; - roles.forEach(n => { + + for (const n of roles) { if (withDomain) { - res.push(...this.getFilteredPolicy(0, n, ...domain)); + res.push(...(await this.getFilteredPolicy(0, n, ...domain))); } else { - res.push(...this.getPermissionsForUser(n)); + res.push(...(await this.getPermissionsForUser(n))); } - }); + } + return res; } } diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index 61d1eddd..cac30125 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -25,7 +25,7 @@ export class ManagementEnforcer extends InternalEnforcer { * 0-index elements of "p" policy rules. So make sure your subject * is the 0-index element, like (sub, obj, act). Duplicates are removed. */ - public getAllSubjects(): string[] { + public async getAllSubjects(): Promise { return this.getAllNamedSubjects('p'); } @@ -38,7 +38,7 @@ export class ManagementEnforcer extends InternalEnforcer { * your subject is the 0-index element, like (sub, obj, act). * Duplicates are removed. */ - public getAllNamedSubjects(ptype: string): string[] { + public async getAllNamedSubjects(ptype: string): Promise { return this.model.getValuesForFieldInPolicy('p', ptype, 0); } @@ -50,7 +50,7 @@ export class ManagementEnforcer extends InternalEnforcer { * is the 1-index element, like (sub, obj, act). * Duplicates are removed. */ - public getAllObjects(): string[] { + public async getAllObjects(): Promise { return this.getAllNamedObjects('p'); } @@ -63,7 +63,7 @@ export class ManagementEnforcer extends InternalEnforcer { * your object is the 1-index element, like (sub, obj, act). * Duplicates are removed. */ - public getAllNamedObjects(ptype: string): string[] { + public async getAllNamedObjects(ptype: string): Promise { return this.model.getValuesForFieldInPolicy('p', ptype, 1); } @@ -75,7 +75,7 @@ export class ManagementEnforcer extends InternalEnforcer { * is the 2-index element, like (sub, obj, act). * Duplicates are removed. */ - public getAllActions(): string[] { + public async getAllActions(): Promise { return this.getAllNamedActions('p'); } @@ -88,7 +88,7 @@ export class ManagementEnforcer extends InternalEnforcer { * your action is the 2-index element, like (sub, obj, act). * Duplicates are removed. */ - public getAllNamedActions(ptype: string): string[] { + public async getAllNamedActions(ptype: string): Promise { return this.model.getValuesForFieldInPolicy('p', ptype, 2); } @@ -100,7 +100,7 @@ export class ManagementEnforcer extends InternalEnforcer { * role is the 1-index element, like (sub, role). * Duplicates are removed. */ - public getAllRoles(): string[] { + public async getAllRoles(): Promise { return this.getAllNamedRoles('g'); } @@ -113,7 +113,7 @@ export class ManagementEnforcer extends InternalEnforcer { * sure your subject is the 0-index element, like (sub, obj, act). * Duplicates are removed. */ - public getAllNamedRoles(ptype: string): string[] { + public async getAllNamedRoles(ptype: string): Promise { return this.model.getValuesForFieldInPolicy('g', ptype, 1); } @@ -122,7 +122,7 @@ export class ManagementEnforcer extends InternalEnforcer { * * @return all the "p" policy rules. */ - public getPolicy(): string[][] { + public async getPolicy(): Promise { return this.getNamedPolicy('p'); } @@ -134,7 +134,7 @@ export class ManagementEnforcer extends InternalEnforcer { * means not to match this field. * @return the filtered "p" policy rules. */ - public getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { + public async getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); } @@ -144,7 +144,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param ptype the policy type, can be "p", "p2", "p3", .. * @return the "p" policy rules of the specified ptype. */ - public getNamedPolicy(ptype: string): string[][] { + public async getNamedPolicy(ptype: string): Promise { return this.model.getPolicy('p', ptype); } @@ -157,7 +157,7 @@ export class ManagementEnforcer extends InternalEnforcer { * means not to match this field. * @return the filtered "p" policy rules of the specified ptype. */ - public getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { + public async getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { return this.model.getFilteredPolicy('p', ptype, fieldIndex, ...fieldValues); } @@ -166,7 +166,7 @@ export class ManagementEnforcer extends InternalEnforcer { * * @return all the "g" policy rules. */ - public getGroupingPolicy(): string[][] { + public async getGroupingPolicy(): Promise { return this.getNamedGroupingPolicy('g'); } @@ -177,7 +177,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param fieldValues the field values to be matched, value "" means not to match this field. * @return the filtered "g" policy rules. */ - public getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): string[][] { + public async getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); } @@ -187,7 +187,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param ptype the policy type, can be "g", "g2", "g3", .. * @return the "g" policy rules of the specified ptype. */ - public getNamedGroupingPolicy(ptype: string): string[][] { + public async getNamedGroupingPolicy(ptype: string): Promise { return this.model.getPolicy('g', ptype); } @@ -200,7 +200,7 @@ export class ManagementEnforcer extends InternalEnforcer { * means not to match this field. * @return the filtered "g" policy rules of the specified ptype. */ - public getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): string[][] { + public async getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { return this.model.getFilteredPolicy('g', ptype, fieldIndex, ...fieldValues); } @@ -210,7 +210,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param params the "p" policy rule, ptype "p" is implicitly used. * @return whether the rule exists. */ - public hasPolicy(...params: string[]): boolean { + public async hasPolicy(...params: string[]): Promise { return this.hasNamedPolicy('p', ...params); } @@ -221,7 +221,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param params the "p" policy rule. * @return whether the rule exists. */ - public hasNamedPolicy(ptype: string, ...params: string[]): boolean { + public async hasNamedPolicy(ptype: string, ...params: string[]): Promise { return this.model.hasPolicy('p', ptype, params); } @@ -247,7 +247,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async addNamedPolicy(ptype: string, ...params: string[]): Promise { - return await this.addPolicyInternal('p', ptype, params); + return this.addPolicyInternal('p', ptype, params); } /** @@ -257,7 +257,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removePolicy(...params: string[]): Promise { - return await this.removeNamedPolicy('p', ...params); + return this.removeNamedPolicy('p', ...params); } /** @@ -269,7 +269,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return await this.removeFilteredNamedPolicy('p', fieldIndex, ...fieldValues); + return this.removeFilteredNamedPolicy('p', fieldIndex, ...fieldValues); } /** @@ -280,7 +280,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeNamedPolicy(ptype: string, ...params: string[]): Promise { - return await this.removePolicyInternal('p', ptype, params); + return this.removePolicyInternal('p', ptype, params); } /** @@ -293,7 +293,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - return await this.removeFilteredPolicyInternal('p', ptype, fieldIndex, fieldValues); + return this.removeFilteredPolicyInternal('p', ptype, fieldIndex, fieldValues); } /** @@ -302,7 +302,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param params the "g" policy rule, ptype "g" is implicitly used. * @return whether the rule exists. */ - public hasGroupingPolicy(...params: string[]): boolean { + public async hasGroupingPolicy(...params: string[]): Promise { return this.hasNamedGroupingPolicy('g', ...params); } @@ -313,7 +313,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param params the "g" policy rule. * @return whether the rule exists. */ - public hasNamedGroupingPolicy(ptype: string, ...params: string[]): boolean { + public async hasNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { return this.model.hasPolicy('g', ptype, params); } @@ -326,7 +326,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async addGroupingPolicy(...params: string[]): Promise { - return await this.addNamedGroupingPolicy('g', ...params); + return this.addNamedGroupingPolicy('g', ...params); } /** @@ -355,7 +355,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeGroupingPolicy(...params: string[]): Promise { - return await this.removeNamedGroupingPolicy('g', ...params); + return this.removeNamedGroupingPolicy('g', ...params); } /** @@ -367,7 +367,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return await this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + return this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); } /** @@ -383,6 +383,7 @@ export class ManagementEnforcer extends InternalEnforcer { if (this.autoBuildRoleLinks) { await this.buildRoleLinks(); } + return ruleRemoved; } @@ -397,9 +398,11 @@ export class ManagementEnforcer extends InternalEnforcer { */ public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { const ruleRemoved = await this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); + if (this.autoBuildRoleLinks) { await this.buildRoleLinks(); } + return ruleRemoved; } @@ -408,7 +411,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param name custom function name * @param func function */ - public addFunction(name: string, func: any): void { + public async addFunction(name: string, func: any): Promise { this.fm.addFunction(name, func); } } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index b8598b2f..3abc997d 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -20,8 +20,8 @@ async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, r await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } -function testGetPolicy(e: Enforcer, res: string[][]): void { - const myRes = e.getPolicy(); +async function testGetPolicy(e: Enforcer, res: string[][]): Promise { + const myRes = await e.getPolicy(); console.log('Policy: ', myRes); expect(Util.array2DEquals(res, myRes)).toBe(true); @@ -208,7 +208,7 @@ test('TestReloadPolicy', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await e.loadPolicy(); - testGetPolicy(e, [ + await testGetPolicy(e, [ ['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 11aa4e94..739fa569 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -29,53 +29,53 @@ function testArray2DEquals(value: string[][], other: string[][]): void { } test('getAllSubjects', async () => { - const allSubjects = e.getAllSubjects(); + const allSubjects = await e.getAllSubjects(); expect(Util.arrayEquals(allSubjects, ['alice', 'bob', 'data2_admin'])); }); test('getAllNamedSubjects', async () => { - const allNamedSubjects = e.getAllNamedSubjects('p'); + const allNamedSubjects = await e.getAllNamedSubjects('p'); expect(Util.arrayEquals(allNamedSubjects, ['alice', 'bob', 'data2_admin'])); }); test('getAllObjects', async () => { - const allObjects = e.getAllObjects(); + const allObjects = await e.getAllObjects(); testArrayEquals(allObjects, ['data1', 'data2']); }); test('getAllNamedObjects', async () => { - let allNamedObjects = e.getAllNamedObjects('p'); + let allNamedObjects = await e.getAllNamedObjects('p'); testArrayEquals(allNamedObjects, ['data1', 'data2']); - allNamedObjects = e.getAllNamedObjects('p1'); + allNamedObjects = await e.getAllNamedObjects('p1'); testArrayEquals(allNamedObjects, []); }); test('getAllActions', async () => { - const allActions = e.getAllActions(); + const allActions = await e.getAllActions(); testArrayEquals(allActions, ['read', 'write']); }); test('getAllNamedActions', async () => { - let allNamedActions = e.getAllNamedActions('p'); + let allNamedActions = await e.getAllNamedActions('p'); testArrayEquals(allNamedActions, ['read', 'write']); - allNamedActions = e.getAllNamedActions('p1'); + allNamedActions = await e.getAllNamedActions('p1'); testArrayEquals(allNamedActions, []); }); test('getAllRoles', async () => { - const allRoles = e.getAllRoles(); + const allRoles = await e.getAllRoles(); testArrayEquals(allRoles, ['data2_admin']); }); test('getAllNamedRoles', async () => { - let allNamedRoles = e.getAllNamedRoles('g'); + let allNamedRoles = await e.getAllNamedRoles('g'); testArrayEquals(allNamedRoles, ['data2_admin']); - allNamedRoles = e.getAllNamedRoles('g1'); + allNamedRoles = await e.getAllNamedRoles('g1'); testArrayEquals(allNamedRoles, []); }); test('getPolicy', async () => { - const policy = e.getPolicy(); + const policy = await e.getPolicy(); testArray2DEquals(policy, [ ['alice', 'data1', 'read'], ['bob', 'data2', 'write'], @@ -85,56 +85,56 @@ test('getPolicy', async () => { }); test('getFilteredPolicy', async () => { - let filteredPolicy = e.getFilteredPolicy(0, 'alice'); + let filteredPolicy = await e.getFilteredPolicy(0, 'alice'); testArray2DEquals(filteredPolicy, [['alice', 'data1', 'read']]); - filteredPolicy = e.getFilteredPolicy(0, 'bob'); + filteredPolicy = await e.getFilteredPolicy(0, 'bob'); testArray2DEquals(filteredPolicy, [['bob', 'data2', 'write']]); }); test('getNamedPolicy', async () => { - let namedPolicy = e.getNamedPolicy('p'); + let namedPolicy = await e.getNamedPolicy('p'); testArray2DEquals(namedPolicy, [ ['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write'] ]); - namedPolicy = e.getNamedPolicy('p1'); + namedPolicy = await e.getNamedPolicy('p1'); testArray2DEquals(namedPolicy, []); }); test('getFilteredNamedPolicy', async () => { - const filteredNamedPolicy = e.getFilteredNamedPolicy('p', 0, 'bob'); + const filteredNamedPolicy = await e.getFilteredNamedPolicy('p', 0, 'bob'); testArray2DEquals(filteredNamedPolicy, [['bob', 'data2', 'write']]); }); test('getGroupingPolicy', async () => { - const groupingPolicy = e.getGroupingPolicy(); + const groupingPolicy = await e.getGroupingPolicy(); testArray2DEquals(groupingPolicy, [['alice', 'data2_admin']]); }); test('getFilteredGroupingPolicy', async () => { - const filteredGroupingPolicy = e.getFilteredGroupingPolicy(0, 'alice'); + const filteredGroupingPolicy = await e.getFilteredGroupingPolicy(0, 'alice'); testArray2DEquals(filteredGroupingPolicy, [['alice', 'data2_admin']]); }); test('getNamedGroupingPolicy', async () => { - const namedGroupingPolicy = e.getNamedGroupingPolicy('g'); + const namedGroupingPolicy = await e.getNamedGroupingPolicy('g'); testArray2DEquals(namedGroupingPolicy, [['alice', 'data2_admin']]); }); test('getFilteredNamedGroupingPolicy', async () => { - const namedGroupingPolicy = e.getFilteredNamedGroupingPolicy('g', 0, 'alice'); + const namedGroupingPolicy = await e.getFilteredNamedGroupingPolicy('g', 0, 'alice'); testArray2DEquals(namedGroupingPolicy, [['alice', 'data2_admin']]); }); test('hasPolicy', async () => { - const hasPolicy = e.hasPolicy('data2_admin', 'data2', 'read'); + const hasPolicy = await e.hasPolicy('data2_admin', 'data2', 'read'); expect(hasPolicy).toBe(true); }); test('hasNamedPolicy', async () => { - const hasNamedPolicy = e.hasNamedPolicy('p', 'data2_admin', 'data2', 'read'); + const hasNamedPolicy = await e.hasNamedPolicy('p', 'data2_admin', 'data2', 'read'); expect(hasNamedPolicy).toBe(true); }); @@ -142,51 +142,51 @@ test('addPolicy', async () => { const p = ['eve', 'data3', 'read']; const added = await e.addPolicy(...p); expect(added).toBe(true); - expect(e.hasPolicy(...p)).toBe(true); + expect(await e.hasPolicy(...p)).toBe(true); }); test('addNamedPolicy', async () => { const p = ['eve', 'data3', 'read']; const added = await e.addNamedPolicy('p', ...p); expect(added).toBe(true); - expect(e.hasPolicy(...p)).toBe(true); + expect(await e.hasPolicy(...p)).toBe(true); }); test('removePolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removePolicy(...p); expect(removed).toBe(true); - expect(e.hasPolicy(...p)).toBe(false); + expect(await e.hasPolicy(...p)).toBe(false); }); test('removeFilteredPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeFilteredPolicy(0, ...p); expect(removed).toBe(true); - expect(e.hasPolicy(...p)).toBe(false); + expect(await e.hasPolicy(...p)).toBe(false); }); test('removeNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeNamedPolicy('p', ...p); expect(removed).toBe(true); - expect(e.hasPolicy(...p)).toBe(false); + expect(await e.hasPolicy(...p)).toBe(false); }); test('removeFilteredNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeFilteredNamedPolicy('p', 0, ...p); expect(removed).toBe(true); - expect(e.hasPolicy(...p)).toBe(false); + expect(await e.hasPolicy(...p)).toBe(false); }); test('hasGroupingPolicy', async () => { - const has = e.hasGroupingPolicy('alice', 'data2_admin'); + const has = await e.hasGroupingPolicy('alice', 'data2_admin'); expect(has).toBe(true); }); test('hasNamedGroupingPolicy', async () => { - const has = e.hasNamedGroupingPolicy('g', 'alice', 'data2_admin'); + const has = await e.hasNamedGroupingPolicy('g', 'alice', 'data2_admin'); expect(has).toBe(true); }); From cb3925ea570a7943bae5cd127a50794b3831561a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 11 Feb 2020 12:24:21 +0000 Subject: [PATCH 312/497] chore(release): 4.0.0 [skip ci] # [4.0.0](https://github.com/casbin/node-casbin/compare/v3.1.0...v4.0.0) (2020-02-11) ### improvement * convert all management_api to async function ([e9f4d38](https://github.com/casbin/node-casbin/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) ### BREAKING CHANGES * see # --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cef581ef..2d1903a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "3.1.0", + "version": "4.0.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From ecec514a582f1bfad94214b61ee06fc1cab3fc36 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 13 Feb 2020 19:53:29 +0800 Subject: [PATCH 313/497] feat: synchronized enforcer --- package.json | 1 + src/coreEnforcer.ts | 11 +- src/index.ts | 1 + src/managementEnforcer.ts | 6 +- src/syncedEnforcer.ts | 486 ++++++++++++++++++++++++++++++++++++++ yarn.lock | 5 + 6 files changed, 503 insertions(+), 7 deletions(-) create mode 100644 src/syncedEnforcer.ts diff --git a/package.json b/package.json index 2d1903a3..4837cd92 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "typescript": "^3.7.2" }, "dependencies": { + "await-lock": "^2.0.1", "expression-eval": "^2.0.0", "ip": "^1.1.5", "lodash": "^4.17.15" diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 37dd1c96..f12437f9 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -143,7 +143,7 @@ export class CoreEnforcer { this.model.printPolicy(); if (this.autoBuildRoleLinks) { - await this.buildRoleLinks(); + await this.buildRoleLinksInternal(); } } @@ -163,7 +163,7 @@ export class CoreEnforcer { this.model.printPolicy(); if (this.autoBuildRoleLinks) { - await this.buildRoleLinks(); + await this.buildRoleLinksInternal(); } return true; } @@ -238,10 +238,13 @@ export class CoreEnforcer { } /** - * buildRoleLinks manually rebuild the - * role inheritance relations. + * buildRoleLinks manually rebuild the role inheritance relations. */ public async buildRoleLinks(): Promise { + return this.buildRoleLinksInternal(); + } + + protected async buildRoleLinksInternal(): Promise { await this.rm.clear(); await this.model.buildRoleLinks(this.rm); } diff --git a/src/index.ts b/src/index.ts index 3c84ee36..e451f21f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,6 +17,7 @@ import * as Util from './util'; export * from './config'; export * from './enforcer'; export * from './cachedEnforcer'; +export * from './syncedEnforcer'; export * from './effect'; export * from './model'; export * from './persist'; diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index cac30125..e86bcbe1 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -342,7 +342,7 @@ export class ManagementEnforcer extends InternalEnforcer { const ruleadded = await this.addPolicyInternal('g', ptype, params); if (this.autoBuildRoleLinks) { - await this.buildRoleLinks(); + await this.buildRoleLinksInternal(); } return ruleadded; @@ -381,7 +381,7 @@ export class ManagementEnforcer extends InternalEnforcer { const ruleRemoved = await this.removePolicyInternal('g', ptype, params); if (this.autoBuildRoleLinks) { - await this.buildRoleLinks(); + await this.buildRoleLinksInternal(); } return ruleRemoved; @@ -400,7 +400,7 @@ export class ManagementEnforcer extends InternalEnforcer { const ruleRemoved = await this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); if (this.autoBuildRoleLinks) { - await this.buildRoleLinks(); + await this.buildRoleLinksInternal(); } return ruleRemoved; diff --git a/src/syncedEnforcer.ts b/src/syncedEnforcer.ts new file mode 100644 index 00000000..b3e314af --- /dev/null +++ b/src/syncedEnforcer.ts @@ -0,0 +1,486 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Enforcer, newEnforcerWithClass } from './enforcer'; +import AwaitLock from 'await-lock'; +import { Watcher } from './persist'; + +// SyncedEnforcer wraps Enforcer and provides synchronized access +export class SyncedEnforcer extends Enforcer { + private lock = new AwaitLock(); + + /** + * setWatcher sets the current watcher. + * + * @param watcher the watcher. + */ + + public setWatcher(watcher: Watcher): void { + this.watcher = watcher; + this.watcher.setUpdateCallback(() => this.loadPolicy()); + } + + /** + * loadPolicy reloads the policy from file/database. + */ + public async loadPolicy(): Promise { + await this.lock.acquireAsync(); + return super.loadPolicy().finally(() => this.lock.release()); + } + + /** + * clearPolicy clears all policy. + */ + public clearPolicy(): void { + this.lock + .acquireAsync() + .then(() => super.clearPolicy()) + .finally(() => this.lock.release()); + } + + /** + * savePolicy saves the current policy (usually after changed with Casbin API) back to file/database. + */ + public async savePolicy(): Promise { + await this.lock.acquireAsync(); + return super.savePolicy().finally(() => this.lock.release()); + } + + /** + * buildRoleLinks manually rebuild the role inheritance relations. + */ + public async buildRoleLinks(): Promise { + await this.lock.acquireAsync(); + return super.buildRoleLinks().finally(() => this.lock.release()); + } + + /** + * If the matchers does not contain an asynchronous method, call it faster. + * + * enforceWithSyncCompile decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ + public async enforceWithSyncCompile(...rvals: any[]): Promise { + await this.lock.acquireAsync(); + return super.enforceWithSyncCompile(...rvals).finally(() => this.lock.release()); + } + + /** + * enforce decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ + public async enforce(...rvals: any[]): Promise { + await this.lock.acquireAsync(); + return super.enforce(...rvals).finally(() => this.lock.release()); + } + + /** + * getAllSubjects gets the list of subjects that show up in the current policy. + * + * @return all the subjects in "p" policy rules. It actually collects the + * 0-index elements of "p" policy rules. So make sure your subject + * is the 0-index element, like (sub, obj, act). Duplicates are removed. + */ + public async getAllSubjects(): Promise { + return this.getAllNamedSubjects('p'); + } + + /** + * getAllNamedSubjects gets the list of subjects that show up in the currentnamed policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make sure + * your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedSubjects(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedSubjects(ptype).finally(() => this.lock.release()); + } + + /** + * getAllObjects gets the list of objects that show up in the current policy. + * + * @return all the objects in "p" policy rules. It actually collects the + * 1-index elements of "p" policy rules. So make sure your object + * is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllObjects(): Promise { + return this.getAllNamedObjects('p'); + } + + /** + * getAllNamedObjects gets the list of objects that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the objects in policy rules of the ptype type. It actually + * collects the 1-index elements of the policy rules. So make sure + * your object is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedObjects(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedObjects(ptype).finally(() => this.lock.release()); + } + + /** + * getAllActions gets the list of actions that show up in the current policy. + * + * @return all the actions in "p" policy rules. It actually collects + * the 2-index elements of "p" policy rules. So make sure your action + * is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllActions(): Promise { + return this.getAllNamedActions('p'); + } + + /** + * GetAllNamedActions gets the list of actions that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the actions in policy rules of the ptype type. It actually + * collects the 2-index elements of the policy rules. So make sure + * your action is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedActions(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedActions(ptype).finally(() => this.lock.release()); + } + + /** + * getAllRoles gets the list of roles that show up in the current policy. + * + * @return all the roles in "g" policy rules. It actually collects + * the 1-index elements of "g" policy rules. So make sure your + * role is the 1-index element, like (sub, role). + * Duplicates are removed. + */ + public async getAllRoles(): Promise { + return this.getAllNamedRoles('g'); + } + + /** + * getAllNamedRoles gets the list of roles that show up in the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make + * sure your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedRoles(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedRoles(ptype).finally(() => this.lock.release()); + } + + /** + * getPolicy gets all the authorization rules in the policy. + * + * @return all the "p" policy rules. + */ + public async getPolicy(): Promise { + return this.getNamedPolicy('p'); + } + + /** + * getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules. + */ + public async getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); + } + + /** + * getNamedPolicy gets all the authorization rules in the named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return the "p" policy rules of the specified ptype. + */ + public async getNamedPolicy(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getNamedPolicy(ptype).finally(() => this.lock.release()); + } + + /** + * getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules of the specified ptype. + */ + public async getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.getFilteredNamedPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } + + /** + * getGroupingPolicy gets all the role inheritance rules in the policy. + * + * @return all the "g" policy rules. + */ + public async getGroupingPolicy(): Promise { + return this.getNamedGroupingPolicy('g'); + } + + /** + * getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" means not to match this field. + * @return the filtered "g" policy rules. + */ + public async getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + /** + * getNamedGroupingPolicy gets all the role inheritance rules in the policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return the "g" policy rules of the specified ptype. + */ + public async getNamedGroupingPolicy(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getNamedGroupingPolicy(ptype).finally(() => this.lock.release()); + } + + /** + * getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "g" policy rules of the specified ptype. + */ + public async getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.getFilteredNamedGroupingPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } + + /** + * hasPolicy determines whether an authorization rule exists. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return whether the rule exists. + */ + public async hasPolicy(...params: string[]): Promise { + return this.hasNamedPolicy('p', ...params); + } + + /** + * hasNamedPolicy determines whether a named authorization rule exists. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return whether the rule exists. + */ + public async hasNamedPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.hasNamedPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * addPolicy adds an authorization rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async addPolicy(...params: string[]): Promise { + return this.addNamedPolicy('p', ...params); + } + + /** + * addNamedPolicy adds an authorization rule to the current named policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ + public async addNamedPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.addNamedPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * removePolicy removes an authorization rule from the current policy. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async removePolicy(...params: string[]): Promise { + return this.removeNamedPolicy('p', ...params); + } + + /** + * removeFilteredPolicy removes an authorization rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.removeFilteredNamedPolicy('p', fieldIndex, ...fieldValues); + } + + /** + * removeNamedPolicy removes an authorization rule from the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ + public async removeNamedPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return this.removePolicyInternal('p', ptype, params).finally(() => this.lock.release()); + } + + /** + * removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.removeFilteredNamedPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } + + /** + * hasGroupingPolicy determines whether a role inheritance rule exists. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return whether the rule exists. + */ + public async hasGroupingPolicy(...params: string[]): Promise { + return this.hasNamedGroupingPolicy('g', ...params); + } + + /** + * hasNamedGroupingPolicy determines whether a named role inheritance rule exists. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return whether the rule exists. + */ + public async hasNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.hasNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * addGroupingPolicy adds a role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async addGroupingPolicy(...params: string[]): Promise { + return this.addNamedGroupingPolicy('g', ...params); + } + + /** + * addNamedGroupingPolicy adds a named role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ + public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.addNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * removeGroupingPolicy removes a role inheritance rule from the current policy. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async removeGroupingPolicy(...params: string[]): Promise { + return this.removeNamedGroupingPolicy('g', ...params); + } + + /** + * removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + /** + * removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ + public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.removeNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.removeFilteredNamedGroupingPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } +} + +// newSyncedEnforcer creates a synchronized enforcer via file or DB. +export async function newSyncedEnforcer(...params: any[]): Promise { + return newEnforcerWithClass(SyncedEnforcer, ...params); +} diff --git a/yarn.lock b/yarn.lock index 4a2254ed..66e3d8de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1036,6 +1036,11 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +await-lock@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/await-lock/download/await-lock-2.0.1.tgz#b3f65fdf66e08f7538260f79b46c15bcfc18cadd" + integrity sha1-s/Zf32bgj3U4Jg95tGwVvPwYyt0= + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" From 7a18dc2a5a9b4415e13b02f81fd60d878506e3d8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 13 Feb 2020 13:57:43 +0000 Subject: [PATCH 314/497] chore(release): 4.1.0 [skip ci] # [4.1.0](https://github.com/casbin/node-casbin/compare/v4.0.0...v4.1.0) (2020-02-13) ### Features * synchronized enforcer ([ecec514](https://github.com/casbin/node-casbin/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4837cd92..ad630787 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.0.0", + "version": "4.1.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 454165ef93c3151c6131fa90c3af885ae7abef90 Mon Sep 17 00:00:00 2001 From: Sefriol Date: Wed, 19 Feb 2020 19:46:26 +0200 Subject: [PATCH 315/497] test(rbac): improve RBAC test coverage Add more test related to RBAC functionality in enforcer.test.ts and rbacAPI.test.ts --- test/enforcer.test.ts | 47 ++++++++++++++++ test/rbacAPI.test.ts | 122 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+) diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 3abc997d..2bb0f0c3 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -139,6 +139,53 @@ test('TestRBACModelInMemory', async () => { await testEnforce(e, 'bob', 'data1', 'write', false); await testEnforce(e, 'bob', 'data2', 'read', false); await testEnforce(e, 'bob', 'data2', 'write', true); + + await e.deletePermissionForUser('alice', 'data1', 'read'); + await e.deletePermissionForUser('bob', 'data2', 'write'); + await e.deletePermissionForUser('data2_admin', 'data2', 'read'); + await e.deletePermissionForUser('data2_admin', 'data2', 'write'); + + await testEnforce(e, 'alice', 'data1', 'read', false); + await testEnforce(e, 'alice', 'data1', 'write', false); + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data1', 'read', false); + await testEnforce(e, 'bob', 'data1', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', false); + + await e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('data2_admin', 'data2', 'read'); + await e.addPermissionForUser('data2_admin', 'data2', 'write'); + await e.addRoleForUser('alice', 'data2_admin'); + + await testEnforce(e, 'alice', 'data2', 'read', true); + await testEnforce(e, 'alice', 'data2', 'write', true); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); + + await e.deletePermission('data2', 'write'); + + await testEnforce(e, 'alice', 'data2', 'read', true); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', false); + + await e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('data2_admin', 'data2', 'read'); + await e.addPermissionForUser('data2_admin', 'data2', 'write'); + + await testEnforce(e, 'alice', 'data2', 'read', true); + await testEnforce(e, 'alice', 'data2', 'write', true); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); + + await e.deletePermissionsForUser('data2_admin'); + + await testEnforce(e, 'alice', 'data2', 'read', false); + await testEnforce(e, 'alice', 'data2', 'write', false); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); }); test('TestRBACModelInMemory2', async () => { diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index b7959d38..78488272 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -14,6 +14,38 @@ import { newEnforcer } from '../src'; +test('test getRolesForUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(await e.getRolesForUser('alice')).toEqual(['admin']); +}); + +test('test getRolesForUser with domain', async () => { + const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); + expect(await e.getRolesForUser('alice', 'domain1')).toEqual(['role:global_admin']); +}); + +test('test add/deleteRoleForUSer with domain', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(await e.getRolesForUser('bob')).toEqual([]); + expect(await e.addRoleForUser('bob', 'data1_admin')).toEqual(true); + expect(await e.hasRoleForUser('bob', 'data1_admin')).toEqual(true); + expect(await e.getUsersForRole('data1_admin')).toEqual(['admin', 'bob']); + expect(await e.deleteRoleForUser('bob', 'data1_admin')).toEqual(true); + expect(await e.hasRoleForUser('bob', 'role:global_admin')).toEqual(false); + expect(await e.getUsersForRole('data1_admin')).toEqual(['admin']); +}); + +test('test add/deleteRoleForUSer with domain', async () => { + const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); + expect(await e.getRolesForUser('bob', 'domain1')).toEqual([]); + expect(await e.addRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true); + expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true); + expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice', 'bob']); + expect(await e.deleteRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true); + expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(false); + expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice']); +}); + test('test getImplicitRolesForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitRolesForUser('bob')).toEqual([]); @@ -26,6 +58,70 @@ test('test getImplicitRolesForUser with domain', async () => { }); test('test getImplicitPermissionsForUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); + expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true); + expect(await e.hasPermissionForUser('data1_admin', 'data1', 'read')).toEqual(true); + expect(await e.hasPermissionForUser('data1_admin', 'data1', 'write')).toEqual(true); + expect(await e.hasPermissionForUser('data2_admin', 'data2', 'read')).toEqual(true); + expect(await e.hasPermissionForUser('data2_admin', 'data2', 'write')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ + ['alice', 'data1', 'read'], + ['data1_admin', 'data1', 'read'], + ['data1_admin', 'data1', 'write'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write'] + ]); +}); + +test('test deleteRolesForUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ + ['alice', 'data1', 'read'], + ['data1_admin', 'data1', 'read'], + ['data1_admin', 'data1', 'write'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write'] + ]); + expect(await e.deleteRolesForUser('alice')).toEqual(true); + expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read']]); + expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); + expect(await e.deleteRolesForUser('bob')).toEqual(false); + expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read']]); + expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); +}); + +test('test deleteRolesForUser with domain', async () => { + const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['admin']); + expect(await e.getImplicitPermissionsForUser('alice', 'domain1')).toEqual([ + ['admin', 'domain1', 'data1', 'read'], + ['admin', 'domain1', 'data1', 'write'] + ]); + expect(await e.getImplicitPermissionsForUser('bob', 'domain2')).toEqual([ + ['admin', 'domain2', 'data2', 'read'], + ['admin', 'domain2', 'data2', 'write'] + ]); + expect(await e.deleteRolesForUser('alice', 'domain1')).toEqual(true); + expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual([]); + expect(await e.getImplicitPermissionsForUser('alice', 'domain2')).toEqual([]); + expect(await e.getImplicitPermissionsForUser('bob', 'domain2')).toEqual([ + ['admin', 'domain2', 'data2', 'read'], + ['admin', 'domain2', 'data2', 'write'] + ]); + expect(await e.deleteRolesForUser('bob', 'domain1')).toEqual(false); + expect(await e.getImplicitPermissionsForUser('alice', 'domain2')).toEqual([]); + expect(await e.getImplicitPermissionsForUser('bob', 'domain1')).toEqual([]); +}); + +test('test deleteRole', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ @@ -35,4 +131,30 @@ test('test getImplicitPermissionsForUser', async () => { ['data2_admin', 'data2', 'read'], ['data2_admin', 'data2', 'write'] ]); + expect(await e.deleteRole('data1_admin')).toEqual(true); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ + ['alice', 'data1', 'read'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write'] + ]); + await e.deleteRole('data2_admin'); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read']]); +}); + +test('test deleteUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ + ['alice', 'data1', 'read'], + ['data1_admin', 'data1', 'read'], + ['data1_admin', 'data1', 'write'], + ['data2_admin', 'data2', 'read'], + ['data2_admin', 'data2', 'write'] + ]); + await e.deleteUser('alice'); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([]); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); + await e.deleteRole('bob'); + expect(await e.getImplicitPermissionsForUser('alice')).toEqual([]); + expect(await e.getImplicitPermissionsForUser('bob')).toEqual([]); }); From 1e6af16e939543a56dbf9cb5d39924263186fc9a Mon Sep 17 00:00:00 2001 From: Sefriol Date: Thu, 20 Feb 2020 11:37:08 +0200 Subject: [PATCH 316/497] fix(enforcer.ts): fix deleteUser and improve deleteRole description deleteUser now removes related grouping policies and normal policies related to user. Previously just grouping policies were removed. Now deleteUser is more in line with deleteRole fix #118 --- src/enforcer.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 56924519..db7388ea 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -184,11 +184,14 @@ export class Enforcer extends ManagementEnforcer { * @return succeeds or not. */ public async deleteUser(user: string): Promise { - return this.removeFilteredGroupingPolicy(0, user); + const res1 = await this.removeFilteredGroupingPolicy(0, user); + const res2 = await this.removeFilteredPolicy(0, user); + return res1 || res2; } /** * deleteRole deletes a role. + * Returns false if the role does not exist (aka not affected). * * @param role the role. * @return succeeds or not. From cd2bb542d1f76d6e9dfc81df1f6be4ed975dfc4c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 20 Feb 2020 12:59:52 +0000 Subject: [PATCH 317/497] chore(release): 4.1.1 [skip ci] ## [4.1.1](https://github.com/casbin/node-casbin/compare/v4.1.0...v4.1.1) (2020-02-20) ### Bug Fixes * **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/node-casbin/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/node-casbin/issues/118) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ad630787..7bbbdab0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.1.0", + "version": "4.1.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From ea608ceacfc29bab97b8dda8c2596867dc6a73d3 Mon Sep 17 00:00:00 2001 From: Mayurs Date: Tue, 10 Mar 2020 09:09:31 +0530 Subject: [PATCH 318/497] add await as getRolesForUser returns Promise --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b3869919..d655e9bb 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ npm install casbin --save 3. Besides the static policy file, node-Casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: ```typescript - const roles = enforcer.getRolesForUser('alice'); + const roles = await enforcer.getRolesForUser('alice'); ``` See [Policy management APIs](#policy-management) for more usage. From 8415fc2648796d033c85771e27219bd32541982e Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 3 Apr 2020 23:50:29 +0800 Subject: [PATCH 319/497] feat: add glob pattern to built-in function --- examples/glob_model.conf | 11 +++++++++ examples/glob_policy.csv | 4 ++++ package.json | 4 +++- src/model/functionMap.ts | 1 + src/util/builtinOperators.ts | 20 +++++++++++++++- test/model.test.ts | 18 ++++++++++++++ test/util.test.ts | 46 ++++++++++++++++++++++++++++++++++++ yarn.lock | 12 ++++++++++ 8 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 examples/glob_model.conf create mode 100644 examples/glob_policy.csv diff --git a/examples/glob_model.conf b/examples/glob_model.conf new file mode 100644 index 00000000..b16cad49 --- /dev/null +++ b/examples/glob_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && globMatch(r.obj, p.obj) && r.act == p.act \ No newline at end of file diff --git a/examples/glob_policy.csv b/examples/glob_policy.csv new file mode 100644 index 00000000..86c03b07 --- /dev/null +++ b/examples/glob_policy.csv @@ -0,0 +1,4 @@ +p, u1, /foo/*, read +p, u2, /foo*, read +p, u3, /*/foo/*, read +p, u4, *, read \ No newline at end of file diff --git a/package.json b/package.json index 7bbbdab0..24ccebd4 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@types/ip": "^0.0.31", "@types/jest": "^24.0.11", "@types/lodash": "^4.14.113", + "@types/micromatch": "^4.0.1", "@types/node": "^10.5.3", "@typescript-eslint/eslint-plugin": "^2.6.1", "@typescript-eslint/parser": "^2.6.1", @@ -42,7 +43,8 @@ "await-lock": "^2.0.1", "expression-eval": "^2.0.0", "ip": "^1.1.5", - "lodash": "^4.17.15" + "lodash": "^4.17.15", + "micromatch": "^4.0.2" }, "files": [ "lib", diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index 5df6aaf5..5390e337 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -35,6 +35,7 @@ export class FunctionMap { fm.addFunction('keyMatch4', util.keyMatch4Func); fm.addFunction('regexMatch', util.regexMatchFunc); fm.addFunction('ipMatch', util.ipMatchFunc); + fm.addFunction('globMatch', util.globMatch); return fm; } diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index a1977739..ca5ea497 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -15,6 +15,7 @@ import * as rbac from '../rbac'; import * as ip from 'ip'; import * as _ from 'lodash'; +import { isMatch } from 'micromatch'; // regexMatch determines whether key1 matches the pattern of key2 in regular expression. function regexMatch(key1: string, key2: string): boolean { @@ -208,6 +209,23 @@ function ipMatchFunc(...args: any[]): boolean { return ipMatch(ip1, ip2); } +/** + * Returns true if the specified `string` matches the given glob `pattern`. + * + * @param string String to match + * @param pattern Glob pattern to use for matching. + * @returns Returns true if the string matches the glob pattern. + * + * @example + * ```javascript + * globMatch("abc.conf", "*.conf") => true + * ``` + */ +function globMatch(string: string, pattern: string): boolean { + const ok = isMatch(string, pattern); + return ok; +} + // generateGFunction is the factory method of the g(_, _) function. function generateGFunction(rm: rbac.RoleManager): any { return async function func(...args: any[]): Promise { @@ -225,4 +243,4 @@ function generateGFunction(rm: rbac.RoleManager): any { }; } -export { keyMatchFunc, keyMatch2Func, keyMatch3Func, regexMatchFunc, ipMatchFunc, generateGFunction, keyMatch4Func }; +export { keyMatchFunc, keyMatch2Func, keyMatch3Func, regexMatchFunc, ipMatchFunc, generateGFunction, keyMatch4Func, globMatch }; diff --git a/test/model.test.ts b/test/model.test.ts index d8123fd6..920a2012 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -155,6 +155,24 @@ class TestResource { } } +test('TestGlobMatchModel', async () => { + const e = await newEnforcer('examples/glob_model.conf', 'examples/glob_policy.csv'); + + await testEnforce(e, 'u1', '/foo', 'read', false); + await testEnforce(e, 'u1', '/foo/subprefix', 'read', true); + await testEnforce(e, 'u1', 'foo', 'read', false); + + await testEnforce(e, 'u2', '/foosubprefix', 'read', true); + await testEnforce(e, 'u2', '/foo/subprefix', 'read', false); + await testEnforce(e, 'u2', 'foo', 'read', false); + + await testEnforce(e, 'u3', '/prefix/foo/subprefix', 'read', true); + await testEnforce(e, 'u3', '/prefix/foo', 'read', false); + + await testEnforce(e, 'u4', '/foo', 'read', false); + await testEnforce(e, 'u4', 'foo', 'read', true); +}); + test('TestABACModel', async () => { const e = await newEnforcer('examples/abac_model.conf'); diff --git a/test/util.test.ts b/test/util.test.ts index 03e5a3a2..19c97d77 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -87,3 +87,49 @@ test('test ipMatchFunc', () => { expect(() => util.ipMatchFunc('127.0.0.1', 'I am alice')).toThrow(/invalid/g); expect(util.ipMatchFunc('192.168.2.189', '192.168.1.134/26')).toEqual(false); }); + +test('test globMatch', () => { + expect(util.globMatch('/foo', '/foo')).toEqual(true); + expect(util.globMatch('/foo', '/foo*')).toEqual(true); + expect(util.globMatch('/foo', '/foo/*')).toEqual(false); + + expect(util.globMatch('/foo', '/foo')).toEqual(true); + expect(util.globMatch('/foo', '/foo*')).toEqual(true); + expect(util.globMatch('/foo', '/foo/*')).toEqual(false); + expect(util.globMatch('/foo/bar', '/foo')).toEqual(false); + expect(util.globMatch('/foo/bar', '/foo*')).toEqual(false); + expect(util.globMatch('/foo/bar', '/foo/*')).toEqual(true); + expect(util.globMatch('/foobar', '/foo')).toEqual(false); + expect(util.globMatch('/foobar', '/foo*')).toEqual(true); + expect(util.globMatch('/foobar', '/foo/*')).toEqual(false); + + expect(util.globMatch('/foo', '*/foo')).toEqual(true); + expect(util.globMatch('/foo', '*/foo*')).toEqual(true); + expect(util.globMatch('/foo', '*/foo/*')).toEqual(false); + expect(util.globMatch('/foo/bar', '*/foo')).toEqual(false); + expect(util.globMatch('/foo/bar', '*/foo*')).toEqual(false); + expect(util.globMatch('/foo/bar', '*/foo/*')).toEqual(true); + expect(util.globMatch('/foobar', '*/foo')).toEqual(false); + expect(util.globMatch('/foobar', '*/foo*')).toEqual(true); + expect(util.globMatch('/foobar', '*/foo/*')).toEqual(false); + + expect(util.globMatch('/prefix/foo', '*/foo')).toEqual(false); + expect(util.globMatch('/prefix/foo', '*/foo*')).toEqual(false); + expect(util.globMatch('/prefix/foo', '*/foo/*')).toEqual(false); + expect(util.globMatch('/prefix/foo/bar', '*/foo')).toEqual(false); + expect(util.globMatch('/prefix/foo/bar', '*/foo*')).toEqual(false); + expect(util.globMatch('/prefix/foo/bar', '*/foo/*')).toEqual(false); + expect(util.globMatch('/prefix/foobar', '*/foo')).toEqual(false); + expect(util.globMatch('/prefix/foobar', '*/foo*')).toEqual(false); + expect(util.globMatch('/prefix/foobar', '*/foo/*')).toEqual(false); + + expect(util.globMatch('/prefix/subprefix/foo', '*/foo')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foo', '*/foo*')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foo', '*/foo/*')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foo/bar', '*/foo')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foo/bar', '*/foo*')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foo/bar', '*/foo/*')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foobar', '*/foo')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foobar', '*/foo*')).toEqual(false); + expect(util.globMatch('/prefix/subprefix/foobar', '*/foo/*')).toEqual(false); +}); diff --git a/yarn.lock b/yarn.lock index 66e3d8de..5a43a519 100644 --- a/yarn.lock +++ b/yarn.lock @@ -545,6 +545,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/braces@*": + version "3.0.0" + resolved "https://registry.npm.taobao.org/@types/braces/download/@types/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" + integrity sha1-faHA1E/xx+tmCjbsB46mG6frQss= + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -618,6 +623,13 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== +"@types/micromatch@^4.0.1": + version "4.0.1" + resolved "https://registry.npm.taobao.org/@types/micromatch/download/@types/micromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" + integrity sha1-k4FEndZZ/Dgj/SpBkM6syYUIO8c= + dependencies: + "@types/braces" "*" + "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" From 820a87adae208322a661146739faa0d630651994 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 5 Apr 2020 08:12:06 +0000 Subject: [PATCH 320/497] chore(release): 4.2.0 [skip ci] # [4.2.0](https://github.com/casbin/node-casbin/compare/v4.1.1...v4.2.0) (2020-04-05) ### Features * add glob pattern to built-in function ([8415fc2](https://github.com/casbin/node-casbin/commit/8415fc2648796d033c85771e27219bd32541982e)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 24ccebd4..90089fd6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.1.1", + "version": "4.2.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 9d612ef5a083469ae7a7aa81637e800a6e31e708 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 5 Apr 2020 20:04:06 +0800 Subject: [PATCH 321/497] docs: update README.md --- README.md | 97 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index d655e9bb..7bb3b0e1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# node-Casbin +# Node-Casbin [![NPM version][npm-image]][npm-url] [![NPM download][download-image]][download-url] @@ -14,65 +14,72 @@ [download-image]: https://img.shields.io/npm/dm/casbin.svg?style=flat-square [download-url]: https://npmjs.org/package/casbin -**News**: still worry about how to write the correct node-Casbin policy? `Casbin online editor` is coming to help! Try it at: http://casbin.org/en/editor/ +**News**: still worry about how to write the correct `node-casbin` policy? [Casbin online editor](http://casbin.org/en/editor) is coming to help! ![casbin Logo](casbin-logo.png) -node-Casbin is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). +`node-casbin` is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). ## All the languages supported by Casbin: -[![golang](https://casbin.org/img/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/img/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/img/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/img/langs/php.png)](https://github.com/php-casbin/php-casbin) -----|----|----|---- -[Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) -production-ready | production-ready | production-ready | production-ready +| [![golang](https://casbin.org/img/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/img/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/img/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/img/langs/php.png)](https://github.com/php-casbin/php-casbin) | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| [Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) | +| production-ready | production-ready | production-ready | production-ready | -[![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) -----|----|----|---- -[PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/casbin/casbin-rs) -production-ready | production-ready | experimental | WIP +| [![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | +| [PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/casbin/casbin-rs) | +| production-ready | production-ready | experimental | WIP | + +## Documentation + +https://casbin.org/docs/en/overview ## Installation -``` +```shell script +# NPM npm install casbin --save + +# Yarn +yarn add casbin ``` ## Get started -1. Initialize a new node-Casbin enforcer with a model file and a policy file: +New a `node-casbin` enforcer with a model file and a policy file, see [Model](#official-model) section for details: - ```typescript - import casbin from 'casbin'; - const enforcer = await casbin.newEnforcer('path/to/model.conf', 'path/to/policy.csv'); - ``` - - Note: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details. +```typescript +import { newEnforcer } from 'casbin'; +const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv'); +``` -2. Add an enforcement hook into your code right before the access happens: +> **Note**: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details. - ```typescript - const sub = 'alice'; // the user that wants to access a resource. - const obj = 'data1'; // the resource that is going to be accessed. - const act = 'read'; // the operation that the user performs on the resource. +Add an enforcement hook into your code right before the access happens: - const res = await enforcer.enforce(sub, obj, act); - if (res) { - // permit alice to read data1 - } else { - // deny the request, show an error - } - ``` +```typescript +const sub = 'alice'; // the user that wants to access a resource. +const obj = 'data1'; // the resource that is going to be accessed. +const act = 'read'; // the operation that the user performs on the resource. -3. Besides the static policy file, node-Casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: +const res = await enforcer.enforce(sub, obj, act); +if (res) { + // permit alice to read data1 +} else { + // deny the request, show an error +} +``` - ```typescript - const roles = await enforcer.getRolesForUser('alice'); - ``` +Besides the static policy file, `node-casbin` also provides API for permission management at run-time. +For example, You can get all the roles assigned to a user as below: - See [Policy management APIs](#policy-management) for more usage. +```typescript +const roles = await enforcer.getRolesForUser('alice'); +``` -4. Please refer to the [src/test](https://github.com/casbin/node-casbin/tree/master/test) package for more usage. +See [Policy management APIs](#policy-management) for more usage. ## Policy management @@ -81,23 +88,25 @@ Casbin provides two sets of APIs to manage permissions: - [Management API](https://casbin.org/docs/en/management-api): the primitive API that provides full support for Casbin policy management. - [RBAC API](https://casbin.org/docs/en/rbac-api): a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. -We also provide a [web-based UI](https://casbin.org/docs/en/admin-portal) for model management and policy management: +## Official Model -![model editor](https://hsluoyz.github.io/casbin/ui_model_editor.png) - -![policy editor](https://hsluoyz.github.io/casbin/ui_policy_editor.png) +https://casbin.org/docs/en/supported-models ## Policy persistence https://casbin.org/docs/en/adapters -## Documentation +## Policy consistence between multiple nodes -https://casbin.org/docs/en/overview +https://casbin.org/docs/en/watchers + +## Role manager + +https://casbin.org/docs/en/role-managers ## Contributors -This project exists thanks to all the people who contribute. +This project exists thanks to all the people who contribute. ## Backers From 6e4f87676301470a178ccd10efd28f6758cc738e Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 5 Apr 2020 23:31:24 +0800 Subject: [PATCH 322/497] fix: remove use spread operator with await in array --- src/enforcer.ts | 12 ++++++++---- src/rbac/defaultRoleManager.ts | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index db7388ea..e57c713a 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -288,7 +288,8 @@ export class Enforcer extends ManagementEnforcer { res.push(...roles); for (const n of roles) { - res.push(...(await this.getImplicitRolesForUser(n, ...domain))); + const role = await this.getImplicitRolesForUser(n, ...domain); + res.push(...role); } return res; @@ -306,15 +307,18 @@ export class Enforcer extends ManagementEnforcer { * But getImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]]. */ public async getImplicitPermissionsForUser(user: string, ...domain: string[]): Promise { - const roles = [user, ...(await this.getImplicitRolesForUser(user, ...domain))]; + const roles = await this.getImplicitRolesForUser(user, ...domain); + roles.unshift(user); const res: string[][] = []; const withDomain = domain && domain.length !== 0; for (const n of roles) { if (withDomain) { - res.push(...(await this.getFilteredPolicy(0, n, ...domain))); + const p = await this.getFilteredPolicy(0, n, ...domain); + res.push(...p); } else { - res.push(...(await this.getPermissionsForUser(n))); + const p = await this.getPermissionsForUser(n); + res.push(...p); } } diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index c5a49e12..32ebfb88 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -204,7 +204,7 @@ export class DefaultRoleManager implements RoleManager { * printRoles prints all the roles to log. */ public async printRoles(): Promise { - [...this.allRoles.values()].map(n => { + [...this.allRoles.values()].forEach(n => { logPrint(n.toString()); }); } From 3d726933ba635fc58aa6c0a0a836b6fd532b0553 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 5 Apr 2020 15:39:49 +0000 Subject: [PATCH 323/497] chore(release): 4.2.1 [skip ci] ## [4.2.1](https://github.com/casbin/node-casbin/compare/v4.2.0...v4.2.1) (2020-04-05) ### Bug Fixes * remove use spread operator with await in array ([6e4f876](https://github.com/casbin/node-casbin/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 90089fd6..59083209 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.2.0", + "version": "4.2.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From d4bed461eb0702f1ca04c7f785fbb6ef3ddf60c0 Mon Sep 17 00:00:00 2001 From: Cheng JIANG Date: Fri, 17 Apr 2020 11:18:13 +0200 Subject: [PATCH 324/497] make casbin-rs production ready --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7bb3b0e1..2ebfb53e 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ | [![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | | [PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/casbin/casbin-rs) | -| production-ready | production-ready | experimental | WIP | +| production-ready | production-ready | experimental | production-ready | ## Documentation From 2ce07c29cd49c6da304063e8075923b739fc5145 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sat, 18 Apr 2020 15:35:35 +0800 Subject: [PATCH 325/497] feat: controls whether to automatically notify Watcher --- src/coreEnforcer.ts | 10 ++++++++++ src/internalEnforcer.ts | 24 ++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index f12437f9..040685d2 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -38,6 +38,7 @@ export class CoreEnforcer { private enabled: boolean; protected autoSave: boolean; protected autoBuildRoleLinks: boolean; + protected autoNotifyWatcher: boolean; public initialize(): void { this.rm = new DefaultRoleManager(10); @@ -48,6 +49,7 @@ export class CoreEnforcer { this.enabled = true; this.autoSave = true; this.autoBuildRoleLinks = true; + this.autoNotifyWatcher = true; } /** @@ -227,6 +229,14 @@ export class CoreEnforcer { this.autoSave = autoSave; } + /** + * enableAutoNotifyWatcher controls whether to save a policy rule automatically notify the Watcher when it is added or removed. + * @param enable whether to enable the AutoNotifyWatcher feature. + */ + public enableAutoNotifyWatcher(enable: boolean): void { + this.autoNotifyWatcher = enable; + } + /** * enableAutoBuildRoleLinks controls whether to save a policy rule * automatically to the adapter when it is added or removed. diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 1bb0e95b..1176900f 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -35,11 +35,11 @@ export class InternalEnforcer extends CoreEnforcer { throw e; } } + } - if (this.watcher) { - // error intentionally ignored - await this.watcher.update(); - } + if (this.watcher && this.autoNotifyWatcher) { + // error intentionally ignored + await this.watcher.update(); } return ruleAdded; @@ -62,11 +62,11 @@ export class InternalEnforcer extends CoreEnforcer { throw e; } } + } - if (this.watcher) { - // error intentionally ignored - await this.watcher.update(); - } + if (this.watcher && this.autoNotifyWatcher) { + // error intentionally ignored + await this.watcher.update(); } return ruleRemoved; @@ -89,11 +89,11 @@ export class InternalEnforcer extends CoreEnforcer { throw e; } } + } - if (this.watcher) { - // error intentionally ignored - await this.watcher.update(); - } + if (this.watcher && this.autoNotifyWatcher) { + // error intentionally ignored + await this.watcher.update(); } return ruleRemoved; From f46e8a9830d52f3119f4171a7a9f911c3ad93181 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 20 Apr 2020 12:53:18 +0000 Subject: [PATCH 326/497] chore(release): 4.3.0 [skip ci] # [4.3.0](https://github.com/casbin/node-casbin/compare/v4.2.1...v4.3.0) (2020-04-20) ### Features * controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/node-casbin/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 59083209..e501049f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.2.1", + "version": "4.3.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 21 Apr 2020 14:07:10 +0800 Subject: [PATCH 327/497] fix: improve update into adapter before model --- src/internalEnforcer.ts | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 1176900f..c1651640 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -22,9 +22,8 @@ export class InternalEnforcer extends CoreEnforcer { * addPolicyInternal adds a rule to the current policy. */ public async addPolicyInternal(sec: string, ptype: string, rule: string[]): Promise { - const ruleAdded = this.model.addPolicy(sec, ptype, rule); - if (!ruleAdded) { - return ruleAdded; + if (this.model.hasPolicy(sec, ptype, rule)) { + return false; } if (this.adapter && this.autoSave) { @@ -39,19 +38,18 @@ export class InternalEnforcer extends CoreEnforcer { if (this.watcher && this.autoNotifyWatcher) { // error intentionally ignored - await this.watcher.update(); + this.watcher.update(); } - return ruleAdded; + return this.model.addPolicy(sec, ptype, rule); } /** * removePolicyInternal removes a rule from the current policy. */ public async removePolicyInternal(sec: string, ptype: string, rule: string[]): Promise { - const ruleRemoved = this.model.removePolicy(sec, ptype, rule); - if (!ruleRemoved) { - return ruleRemoved; + if (!this.model.hasPolicy(sec, ptype, rule)) { + return false; } if (this.adapter && this.autoSave) { @@ -66,21 +64,16 @@ export class InternalEnforcer extends CoreEnforcer { if (this.watcher && this.autoNotifyWatcher) { // error intentionally ignored - await this.watcher.update(); + this.watcher.update(); } - return ruleRemoved; + return this.model.removePolicy(sec, ptype, rule); } /** * removeFilteredPolicyInternal removes rules based on field filters from the current policy. */ public async removeFilteredPolicyInternal(sec: string, ptype: string, fieldIndex: number, fieldValues: string[]): Promise { - const ruleRemoved = this.model.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); - if (!ruleRemoved) { - return ruleRemoved; - } - if (this.adapter && this.autoSave) { try { await this.adapter.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); @@ -93,9 +86,9 @@ export class InternalEnforcer extends CoreEnforcer { if (this.watcher && this.autoNotifyWatcher) { // error intentionally ignored - await this.watcher.update(); + this.watcher.update(); } - return ruleRemoved; + return this.model.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); } } From bf0b66ec22c20f554b514de7d1ba253f602627b9 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 21 Apr 2020 06:50:45 +0000 Subject: [PATCH 328/497] chore(release): 4.3.1 [skip ci] ## [4.3.1](https://github.com/casbin/node-casbin/compare/v4.3.0...v4.3.1) (2020-04-21) ### Bug Fixes * improve update into adapter before model ([0e9ccc6](https://github.com/casbin/node-casbin/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e501049f..ee53f581 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.3.0", + "version": "4.3.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sat, 25 Apr 2020 23:26:46 +0800 Subject: [PATCH 329/497] feat: add addMatchingFunc to DefaultRoleManager --- examples/rbac_with_pattern_model.conf | 15 ++++++++ examples/rbac_with_pattern_policy.csv | 17 +++++++++ src/coreEnforcer.ts | 7 ++++ src/rbac/defaultRoleManager.ts | 54 ++++++++++++++++++++++++--- test/model.test.ts | 37 +++++++++++++++++- 5 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 examples/rbac_with_pattern_model.conf create mode 100644 examples/rbac_with_pattern_policy.csv diff --git a/examples/rbac_with_pattern_model.conf b/examples/rbac_with_pattern_model.conf new file mode 100644 index 00000000..84580d90 --- /dev/null +++ b/examples/rbac_with_pattern_model.conf @@ -0,0 +1,15 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ +g2 = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && g2(r.obj, p.obj) && regexMatch(r.act, p.act) \ No newline at end of file diff --git a/examples/rbac_with_pattern_policy.csv b/examples/rbac_with_pattern_policy.csv new file mode 100644 index 00000000..a8c06c74 --- /dev/null +++ b/examples/rbac_with_pattern_policy.csv @@ -0,0 +1,17 @@ +p, alice, /pen/1, GET +p, alice, /pen2/1, GET +p, book_admin, book_group, GET +p, pen_admin, pen_group, GET + +g, alice, book_admin +g, bob, pen_admin + +g, /book/*, book_group +g, cathy, /book/1/2/3/4/5 +g, cathy, pen_admin + +g2, /book/:id, book_group +g2, /pen/:id, pen_group + +g2, /book2/{id}, book_group +g2, /pen2/{id}, pen_group \ No newline at end of file diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 040685d2..56e5cfc2 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -120,6 +120,13 @@ export class CoreEnforcer { this.rm = rm; } + /** + * getRoleManager gets the current role manager. + */ + public getRoleManager(): RoleManager { + return this.rm; + } + /** * setEffector sets the current effector. * diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 32ebfb88..13b076ed 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -67,10 +67,14 @@ class Role { } } +type MatchingFunc = (arg1: string, arg2: string) => boolean; + // RoleManager provides a default implementation for the RoleManager interface export class DefaultRoleManager implements RoleManager { private allRoles: Map; private maxHierarchyLevel: number; + private hasPattern = false; + private matchingFunc: MatchingFunc; /** * DefaultRoleManager is the constructor for creating an instance of the @@ -83,6 +87,19 @@ export class DefaultRoleManager implements RoleManager { this.maxHierarchyLevel = maxHierarchyLevel; } + /** + * e.buildRoleLinks must be called after addMatchingFunc(). + * @param name + * @param fn + * @example ```javascript + * await e.GetRoleManager().addMatchingFunc('matcher', util.keyMatch); await e.buildRoleLinks(); + * ``` + */ + public async addMatchingFunc(name: string, fn: MatchingFunc): Promise { + this.hasPattern = true; + this.matchingFunc = fn; + } + /** * addLink adds the inheritance link between role: name1 and role: name2. * aka role: name1 inherits role: name2. @@ -210,17 +227,42 @@ export class DefaultRoleManager implements RoleManager { } private createRole(name: string): Role { - const role = this.allRoles.get(name); - if (role) { - return role; - } else { + let role = this.allRoles.get(name); + if (!role) { const newRole = new Role(name); + role = newRole; this.allRoles.set(name, newRole); - return newRole; } + + if (!this.hasPattern) { + return role; + } + + for (const roleName of this.allRoles.keys()) { + if (!(this.matchingFunc(name, roleName) && name !== roleName)) { + continue; + } + + const inherit = this.allRoles.get(roleName); + if (inherit) { + role.addRole(inherit); + } + } + + return role; } private hasRole(name: string): boolean { - return this.allRoles.has(name); + if (!this.hasPattern) { + return this.allRoles.has(name); + } else { + for (const role of this.allRoles.keys()) { + if (this.matchingFunc(name, role)) { + return true; + } + } + } + + return false; } } diff --git a/test/model.test.ts b/test/model.test.ts index 920a2012..5defe2c1 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -13,7 +13,8 @@ // limitations under the License. import * as _ from 'lodash'; -import { newEnforcer, Enforcer, newModel } from '../src'; +import { DefaultRoleManager, Enforcer, newEnforcer, newModel } from '../src'; +import { keyMatch2Func, keyMatch3Func } from '../src/util'; async function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); @@ -300,3 +301,37 @@ test('TestMatcher', async () => { expect(m.model.get('m')?.get('m')?.value).toEqual(`keyMatch(r_obj, ".*get$") || regexMatch(r_act, ".user.")`); }); + +test('TestRBACModelWithPattern', async () => { + const e = await newEnforcer('examples/rbac_with_pattern_model.conf', 'examples/rbac_with_pattern_policy.csv'); + + // Here's a little confusing: the matching function here is not the custom function used in matcher. + // It is the matching function used by "g" (and "g2", "g3" if any..) + // You can see in policy that: "g2, /book/:id, book_group", so in "g2()" function in the matcher, instead + // of checking whether "/book/:id" equals the obj: "/book/1", it checks whether the pattern matches. + // You can see it as normal RBAC: "/book/:id" == "/book/1" becomes KeyMatch2("/book/:id", "/book/1") + const rm = e.getRoleManager() as DefaultRoleManager; + await rm.addMatchingFunc('KeyMatch2', keyMatch2Func); + await e.buildRoleLinks(); + await testEnforce(e, 'alice', '/book/1', 'GET', true); + await testEnforce(e, 'alice', '/book/2', 'GET', true); + await testEnforce(e, 'alice', '/pen/1', 'GET', true); + await testEnforce(e, 'alice', '/pen/2', 'GET', false); + await testEnforce(e, 'bob', '/book/1', 'GET', false); + await testEnforce(e, 'bob', '/book/2', 'GET', false); + await testEnforce(e, 'bob', '/pen/1', 'GET', true); + await testEnforce(e, 'bob', '/pen/2', 'GET', true); + + // AddMatchingFunc() is actually setting a function because only one function is allowed, + // so when we set "KeyMatch3", we are actually replacing "KeyMatch2" with "KeyMatch3". + await rm.addMatchingFunc('KeyMatch3', keyMatch3Func); + await e.buildRoleLinks(); + await testEnforce(e, 'alice', '/book2/1', 'GET', true); + await testEnforce(e, 'alice', '/book2/2', 'GET', true); + await testEnforce(e, 'alice', '/pen2/1', 'GET', true); + await testEnforce(e, 'alice', '/pen2/2', 'GET', false); + await testEnforce(e, 'bob', '/book2/1', 'GET', false); + await testEnforce(e, 'bob', '/book2/2', 'GET', false); + await testEnforce(e, 'bob', '/pen2/1', 'GET', true); + await testEnforce(e, 'bob', '/pen2/2', 'GET', true); +}); From b2b960f6dfebe7fdbbc4c75504e7f6967a29fb94 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 25 Apr 2020 16:11:11 +0000 Subject: [PATCH 330/497] chore(release): 4.4.0 [skip ci] # [4.4.0](https://github.com/casbin/node-casbin/compare/v4.3.1...v4.4.0) (2020-04-25) ### Features * add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/node-casbin/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ee53f581..0adef41d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.3.1", + "version": "4.4.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 5a6f8970daeacbdaabadda237669b45a67f5759b Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Sun, 26 Apr 2020 16:12:59 +0530 Subject: [PATCH 331/497] Added batch adapter interface. --- src/persist/batchAdapter.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/persist/batchAdapter.ts diff --git a/src/persist/batchAdapter.ts b/src/persist/batchAdapter.ts new file mode 100644 index 00000000..a1260ca2 --- /dev/null +++ b/src/persist/batchAdapter.ts @@ -0,0 +1,11 @@ +import { Adapter } from './adapter' + +// BatchAdapter is the interface for Casbin adapters with multiple add and remove policy functions. +export interface BatchAdapter extends Adapter{ + // AddPolicies adds policy rules to the storage. + // This is part of the Auto-Save feature. + AddPolicies(sec: string, ptype: string, rules: string[][]): Promise; + // RemovePolicies removes policy rules from the storage. + // This is part of the Auto-Save feature. + RemovePolicies(sec: string, ptype: string, rules: string[][]): Promise; +} From bcf0eaea99da6569b168c3a8afc82c914b6b9c2b Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Sun, 26 Apr 2020 16:43:54 +0530 Subject: [PATCH 332/497] Model functions added. --- src/model/model.ts | 38 +++++++++++++++++++++++++++++++++++++ src/persist/batchAdapter.ts | 16 ++++++++-------- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 8a135bdb..0bce725c 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -216,6 +216,22 @@ export class Model { return false; } + // addPolicies adds policy rules to the model. + public addPolicies(sec: string, ptype: string, rules: string[][]): boolean { + for (let i = 0; i < rules.length; i++) { + if (this.hasPolicy(sec, ptype, rules[i])) { + return false; + } + } + + const ast: any = this.model.get(sec)?.get(ptype); + for (let i = 0; i < rules.length; i++) { + ast.policy.push(rules[i]); + } + + return true; + } + // removePolicy removes a policy rule from the model. public removePolicy(sec: string, key: string, rule: string[]): boolean { if (this.hasPolicy(sec, key, rule)) { @@ -230,6 +246,28 @@ export class Model { return false; } + // removePolicies removes policy rules from the model. + public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { + const ast: any = this.model.get(sec)?.get(ptype); + OUTER: for (let j = 0; j < rules.length; j++) { + for (const r of ast.policy) { + if (util.arrayEquals(rules[j], r)) { + continue OUTER; + } + } + return false; + } + + for (let j = 0; j < rules.length; j++) { + for (const i in ast.policy) { + if (util.arrayEquals(rules[j], ast.policy[i])) { + ast.policy = ast.policy.slice(0, i).concat(ast.policy.slice(i + 1)); + } + } + } + return true; + } + // getFilteredPolicy gets rules based on field filters from a policy. public getFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): string[][] { const res: string[][] = []; diff --git a/src/persist/batchAdapter.ts b/src/persist/batchAdapter.ts index a1260ca2..47ba48d6 100644 --- a/src/persist/batchAdapter.ts +++ b/src/persist/batchAdapter.ts @@ -1,11 +1,11 @@ -import { Adapter } from './adapter' +import { Adapter } from './adapter'; // BatchAdapter is the interface for Casbin adapters with multiple add and remove policy functions. -export interface BatchAdapter extends Adapter{ - // AddPolicies adds policy rules to the storage. - // This is part of the Auto-Save feature. - AddPolicies(sec: string, ptype: string, rules: string[][]): Promise; - // RemovePolicies removes policy rules from the storage. - // This is part of the Auto-Save feature. - RemovePolicies(sec: string, ptype: string, rules: string[][]): Promise; +export interface BatchAdapter extends Adapter { + // AddPolicies adds policy rules to the storage. + // This is part of the Auto-Save feature. + AddPolicies(sec: string, ptype: string, rules: string[][]): Promise; + // RemovePolicies removes policy rules from the storage. + // This is part of the Auto-Save feature. + RemovePolicies(sec: string, ptype: string, rules: string[][]): Promise; } From 0890233519087c51d28d8a1873f442eefef4a009 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Sun, 26 Apr 2020 17:01:27 +0530 Subject: [PATCH 333/497] Added internal api methods. --- src/internalEnforcer.ts | 56 +++++++++++++++++++++++++++++++++++++ src/persist/batchAdapter.ts | 8 +++--- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index c1651640..ac4347b8 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -13,6 +13,7 @@ // limitations under the License. import { CoreEnforcer } from './coreEnforcer'; +import { BatchAdapter } from './persist/batchAdapter'; /** * InternalEnforcer = CoreEnforcer + Internal API. @@ -44,6 +45,34 @@ export class InternalEnforcer extends CoreEnforcer { return this.model.addPolicy(sec, ptype, rule); } + // addPolicies adds rules to the current policy. + // removePolicies removes rules from the current policy. + public async addPoliciesInternal(sec: string, ptype: string, rules: string[][]): Promise { + for (const rule of rules) { + if (this.model.hasPolicy(sec, ptype, rule)) { + return false; + } + } + + const batchAdapter = this.adapter as BatchAdapter; + if (batchAdapter && this.autoSave) { + try { + await batchAdapter.addPolicies(sec, ptype, rules); + } catch (e) { + if (e.message !== 'not implemented') { + throw e; + } + } + } + + if (this.watcher && this.autoNotifyWatcher) { + // error intentionally ignored + this.watcher.update(); + } + + return this.model.addPolicies(sec, ptype, rules); + } + /** * removePolicyInternal removes a rule from the current policy. */ @@ -70,6 +99,33 @@ export class InternalEnforcer extends CoreEnforcer { return this.model.removePolicy(sec, ptype, rule); } + // removePolicies removes rules from the current policy. + public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { + for (const rule of rules) { + if (!this.model.hasPolicy(sec, ptype, rule)) { + return false; + } + } + + const batchAdapter = this.adapter as BatchAdapter; + if (batchAdapter && this.autoSave) { + try { + await batchAdapter.removePolicies(sec, ptype, rules); + } catch (e) { + if (e.message !== 'not implemented') { + throw e; + } + } + } + + if (this.watcher && this.autoNotifyWatcher) { + // error intentionally ignored + this.watcher.update(); + } + + return this.model.removePolicies(sec, ptype, rules); + } + /** * removeFilteredPolicyInternal removes rules based on field filters from the current policy. */ diff --git a/src/persist/batchAdapter.ts b/src/persist/batchAdapter.ts index 47ba48d6..b436f8d0 100644 --- a/src/persist/batchAdapter.ts +++ b/src/persist/batchAdapter.ts @@ -2,10 +2,10 @@ import { Adapter } from './adapter'; // BatchAdapter is the interface for Casbin adapters with multiple add and remove policy functions. export interface BatchAdapter extends Adapter { - // AddPolicies adds policy rules to the storage. + // addPolicies adds policy rules to the storage. // This is part of the Auto-Save feature. - AddPolicies(sec: string, ptype: string, rules: string[][]): Promise; - // RemovePolicies removes policy rules from the storage. + addPolicies(sec: string, ptype: string, rules: string[][]): Promise; + // removePolicies removes policy rules from the storage. // This is part of the Auto-Save feature. - RemovePolicies(sec: string, ptype: string, rules: string[][]): Promise; + removePolicies(sec: string, ptype: string, rules: string[][]): Promise; } From 834ab2eb7ae6c0061b5d456da114fd5aa03d46a0 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Sun, 26 Apr 2020 17:22:46 +0530 Subject: [PATCH 334/497] Added Management API methods for batch functions. --- src/internalEnforcer.ts | 2 +- src/managementEnforcer.ts | 104 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index ac4347b8..054a445e 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -100,7 +100,7 @@ export class InternalEnforcer extends CoreEnforcer { } // removePolicies removes rules from the current policy. - public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { + public async removePoliciesInternal(sec: string, ptype: string, rules: string[][]): Promise { for (const rule of rules) { if (!this.model.hasPolicy(sec, ptype, rule)) { return false; diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index e86bcbe1..7cdb33a0 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -237,6 +237,18 @@ export class ManagementEnforcer extends InternalEnforcer { return this.addNamedPolicy('p', ...params); } + /** + * addPolicies adds authorization rules to the current policy. + * If the rule already exists, the function returns false and the rules will not be added. + * Otherwise the function returns true by adding the new rules. + * + * @param rules the "p" policy rules, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async addPolicies(rules: string[][]): Promise { + return this.addNamedPolicies('p', rules); + } + /** * addNamedPolicy adds an authorization rule to the current named policy. * If the rule already exists, the function returns false and the rule will not be added. @@ -250,6 +262,19 @@ export class ManagementEnforcer extends InternalEnforcer { return this.addPolicyInternal('p', ptype, params); } + /** + * addNamedPolicies adds authorization rules to the current named policy. + * If the rule already exists, the function returns false and the rules will not be added. + * Otherwise the function returns true by adding the new rules. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param rules the "p" policy rules. + * @return succeeds or not. + */ + public async addNamedPolicies(ptype: string, rules: string[][]): Promise { + return this.addPoliciesInternal('p', ptype, rules); + } + /** * removePolicy removes an authorization rule from the current policy. * @@ -260,6 +285,16 @@ export class ManagementEnforcer extends InternalEnforcer { return this.removeNamedPolicy('p', ...params); } + /** + * removePolicies removes an authorization rules from the current policy. + * + * @param rules the "p" policy rules, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async removePolicies(rules: string[][]): Promise { + return this.removeNamedPolicies('p', rules); + } + /** * removeFilteredPolicy removes an authorization rule from the current policy, field filters can be specified. * @@ -283,6 +318,17 @@ export class ManagementEnforcer extends InternalEnforcer { return this.removePolicyInternal('p', ptype, params); } + /** + * removeNamedPolicies removes authorization rules from the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param rules the "p" policy rules. + * @return succeeds or not. + */ + public async removeNamedPolicies(ptype: string, rules: string[][]): Promise { + return this.removePoliciesInternal('p', ptype, rules); + } + /** * removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. * @@ -329,6 +375,18 @@ export class ManagementEnforcer extends InternalEnforcer { return this.addNamedGroupingPolicy('g', ...params); } + /** + * addGroupingPolicies adds a role inheritance rules to the current policy. + * If the rule already exists, the function returns false and the rules will not be added. + * Otherwise the function returns true by adding the new rules. + * + * @param rules the "g" policy rules, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async addGroupingPolicies(rules: string[][]): Promise { + return this.addNamedGroupingPolicies('g', rules); + } + /** * addNamedGroupingPolicy adds a named role inheritance rule to the current policy. * If the rule already exists, the function returns false and the rule will not be added. @@ -348,6 +406,25 @@ export class ManagementEnforcer extends InternalEnforcer { return ruleadded; } + /** + * addNamedGroupingPolicies adds named role inheritance rules to the current policy. + * If the rule already exists, the function returns false and the rules will not be added. + * Otherwise the function returns true by adding the new rules. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param rules the "g" policy rule. + * @return succeeds or not. + */ + public async addNamedGroupingPolicies(ptype: string, rules: string[][]): Promise { + const rulesAdded = await this.addPoliciesInternal('g', ptype, rules); + + if (this.autoBuildRoleLinks) { + await this.buildRoleLinksInternal(); + } + + return rulesAdded; + } + /** * removeGroupingPolicy removes a role inheritance rule from the current policy. * @@ -358,6 +435,16 @@ export class ManagementEnforcer extends InternalEnforcer { return this.removeNamedGroupingPolicy('g', ...params); } + /** + * removeGroupingPolicies removes role inheritance rules from the current policy. + * + * @param rules the "g" policy rules, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async removeGroupingPolicies(rules: string[][]): Promise { + return this.removeNamedGroupingPolicies('g', rules); + } + /** * removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. * @@ -387,6 +474,23 @@ export class ManagementEnforcer extends InternalEnforcer { return ruleRemoved; } + /** + * removeNamedGroupingPolicies removes role inheritance rules from the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param rules the "g" policy rules. + * @return succeeds or not. + */ + public async removeNamedGroupingPolicies(ptype: string, rules: string[][]): Promise { + const rulesRemoved = this.removePoliciesInternal('g', ptype, rules); + + if (this.autoBuildRoleLinks) { + await this.buildRoleLinksInternal(); + } + + return rulesRemoved; + } + /** * removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. * From 1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 30 Apr 2020 11:13:07 +0800 Subject: [PATCH 335/497] feat: avoid miss initialize() --- src/coreEnforcer.ts | 32 +++++++++----------------------- src/enforcer.ts | 6 +----- test/model.test.ts | 1 - 3 files changed, 10 insertions(+), 29 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 56e5cfc2..614b0881 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -27,30 +27,18 @@ import { getLogger, logPrint } from './log'; export class CoreEnforcer { protected modelPath: string; protected model: Model; - protected fm: FunctionMap; - private eft: Effector; - private matcherMap: Map Promise) | ((context: object) => any)>; + protected fm: FunctionMap = FunctionMap.loadFunctionMap(); + protected eft: Effector = new DefaultEffector(); + private matcherMap: Map Promise) | ((context: object) => any)> = new Map(); protected adapter: FilteredAdapter | Adapter; protected watcher: Watcher | null = null; - protected rm: RoleManager; - - private enabled: boolean; - protected autoSave: boolean; - protected autoBuildRoleLinks: boolean; - protected autoNotifyWatcher: boolean; - - public initialize(): void { - this.rm = new DefaultRoleManager(10); - this.eft = new DefaultEffector(); - this.matcherMap = new Map(); - this.watcher = null; - - this.enabled = true; - this.autoSave = true; - this.autoBuildRoleLinks = true; - this.autoNotifyWatcher = true; - } + protected rm: RoleManager = new DefaultRoleManager(10); + + protected enabled = true; + protected autoSave = true; + protected autoBuildRoleLinks = true; + protected autoNotifyWatcher = true; /** * loadModel reloads the model from the model CONF file. @@ -61,7 +49,6 @@ export class CoreEnforcer { this.model = newModel(); this.model.loadModel(this.modelPath); this.model.printModel(); - this.fm = FunctionMap.loadFunctionMap(); } /** @@ -80,7 +67,6 @@ export class CoreEnforcer { */ public setModel(m: Model): void { this.model = m; - this.fm = FunctionMap.loadFunctionMap(); } /** diff --git a/src/enforcer.ts b/src/enforcer.ts index e57c713a..ea97f55d 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -13,7 +13,7 @@ // limitations under the License. import { ManagementEnforcer } from './managementEnforcer'; -import { FunctionMap, Model, newModel } from './model'; +import { Model, newModel } from './model'; import { Adapter, FileAdapter, StringAdapter } from './persist'; import { getLogger } from './log'; @@ -65,12 +65,8 @@ export class Enforcer extends ManagementEnforcer { this.model = m; this.model.printModel(); - this.fm = FunctionMap.loadFunctionMap(); - - this.initialize(); if (this.adapter) { - // error intentionally ignored await this.loadPolicy(); } } diff --git a/test/model.test.ts b/test/model.test.ts index 5defe2c1..cc320919 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -99,7 +99,6 @@ test('TestBasicModelWithoutUsers', async () => { test('TestBasicModelWithoutResources', async () => { const e = await newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); - e.initialize(); await testEnforceWithoutUsers(e, 'alice', 'read', true); await testEnforceWithoutUsers(e, 'alice', 'write', false); From 60bcb4e3c4450bf48cd5716c39969c27deaec677 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 30 Apr 2020 04:26:39 +0000 Subject: [PATCH 336/497] chore(release): 4.5.0 [skip ci] # [4.5.0](https://github.com/casbin/node-casbin/compare/v4.4.0...v4.5.0) (2020-04-30) ### Features * avoid miss initialize() ([1394e8d](https://github.com/casbin/node-casbin/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0adef41d..675250bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.4.0", + "version": "4.5.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 1ebc39ba097f514ccf537400195ba7a3d79501b4 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 11:28:31 +0530 Subject: [PATCH 337/497] Made necessary changes. --- src/model/model.ts | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 0bce725c..c25d4a35 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -224,9 +224,13 @@ export class Model { } } - const ast: any = this.model.get(sec)?.get(ptype); - for (let i = 0; i < rules.length; i++) { - ast.policy.push(rules[i]); + const ast = this.model.get(sec)?.get(ptype); + if (ast) { + for (let i = 0; i < rules.length; i++) { + ast.policy.push(rules[i]); + } + } else { + return false; } return true; @@ -248,20 +252,24 @@ export class Model { // removePolicies removes policy rules from the model. public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { - const ast: any = this.model.get(sec)?.get(ptype); + const ast = this.model.get(sec)?.get(ptype); OUTER: for (let j = 0; j < rules.length; j++) { - for (const r of ast.policy) { - if (util.arrayEquals(rules[j], r)) { - continue OUTER; + if (ast) { + for (const r of ast.policy) { + if (util.arrayEquals(rules[j], r)) { + continue OUTER; + } } } return false; } for (let j = 0; j < rules.length; j++) { - for (const i in ast.policy) { - if (util.arrayEquals(rules[j], ast.policy[i])) { - ast.policy = ast.policy.slice(0, i).concat(ast.policy.slice(i + 1)); + if (ast) { + for (const i in ast.policy) { + if (util.arrayEquals(rules[j], ast.policy[i])) { + ast.policy = ast.policy.slice(0, parseInt(i)).concat(ast.policy.slice(parseInt(i) + 1)); + } } } } From ee8c490c37c3acfba623ef575bdd88834cfeb0f1 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 20:03:45 +0530 Subject: [PATCH 338/497] Adding efficient implementation for model addPolicies and removePolicies. --- src/model/model.ts | 46 +++++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index c25d4a35..afa116b5 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -218,21 +218,18 @@ export class Model { // addPolicies adds policy rules to the model. public addPolicies(sec: string, ptype: string, rules: string[][]): boolean { - for (let i = 0; i < rules.length; i++) { - if (this.hasPolicy(sec, ptype, rules[i])) { + for (let rule of rules) { + if (!this.hasPolicy(sec, ptype, rule)) { + const ast = this.model.get(sec)?.get(ptype); + if (!ast) { + return false; + } + ast.policy.push(rule); + } else { return false; } } - const ast = this.model.get(sec)?.get(ptype); - if (ast) { - for (let i = 0; i < rules.length; i++) { - ast.policy.push(rules[i]); - } - } else { - return false; - } - return true; } @@ -252,27 +249,18 @@ export class Model { // removePolicies removes policy rules from the model. public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { - const ast = this.model.get(sec)?.get(ptype); - OUTER: for (let j = 0; j < rules.length; j++) { - if (ast) { - for (const r of ast.policy) { - if (util.arrayEquals(rules[j], r)) { - continue OUTER; - } + for (let rule of rules) { + if (this.hasPolicy(sec, ptype, rule)) { + const ast = this.model.get(sec)?.get(ptype); + if (!ast) { + continue; } + ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); + } else { + return false; } - return false; } - for (let j = 0; j < rules.length; j++) { - if (ast) { - for (const i in ast.policy) { - if (util.arrayEquals(rules[j], ast.policy[i])) { - ast.policy = ast.policy.slice(0, parseInt(i)).concat(ast.policy.slice(parseInt(i) + 1)); - } - } - } - } return true; } @@ -326,7 +314,7 @@ export class Model { } } ast.policy = res; - + return bool; } From cdac4131de8dbd881755852187d6339cc3143df0 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 20:04:18 +0530 Subject: [PATCH 339/497] Bug Fixes. --- src/model/model.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index afa116b5..0d24639a 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -218,7 +218,7 @@ export class Model { // addPolicies adds policy rules to the model. public addPolicies(sec: string, ptype: string, rules: string[][]): boolean { - for (let rule of rules) { + for (const rule of rules) { if (!this.hasPolicy(sec, ptype, rule)) { const ast = this.model.get(sec)?.get(ptype); if (!ast) { @@ -249,7 +249,7 @@ export class Model { // removePolicies removes policy rules from the model. public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { - for (let rule of rules) { + for (const rule of rules) { if (this.hasPolicy(sec, ptype, rule)) { const ast = this.model.get(sec)?.get(ptype); if (!ast) { @@ -314,7 +314,7 @@ export class Model { } } ast.policy = res; - + return bool; } From 3ad53cce8be31ad14c4f2b3116df823e03f4066f Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 21:10:07 +0530 Subject: [PATCH 340/497] Fix: Moving statement out of loop. --- src/model/model.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 0d24639a..8bbe925c 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -218,9 +218,9 @@ export class Model { // addPolicies adds policy rules to the model. public addPolicies(sec: string, ptype: string, rules: string[][]): boolean { + const ast = this.model.get(sec)?.get(ptype); for (const rule of rules) { if (!this.hasPolicy(sec, ptype, rule)) { - const ast = this.model.get(sec)?.get(ptype); if (!ast) { return false; } @@ -249,9 +249,10 @@ export class Model { // removePolicies removes policy rules from the model. public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { + const ast = this.model.get(sec)?.get(ptype); for (const rule of rules) { if (this.hasPolicy(sec, ptype, rule)) { - const ast = this.model.get(sec)?.get(ptype); + if (!ast) { continue; } From d8b1bc41bcd5c86a1f760eee1a3fc5cb5c3db617 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 21:13:15 +0530 Subject: [PATCH 341/497] Fix: Prettier --- src/model/model.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/model/model.ts b/src/model/model.ts index 8bbe925c..0c8f99c5 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -252,7 +252,6 @@ export class Model { const ast = this.model.get(sec)?.get(ptype); for (const rule of rules) { if (this.hasPolicy(sec, ptype, rule)) { - if (!ast) { continue; } From a76bd3ac650093b4542c4f2cff15368c219974c9 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 21:28:18 +0530 Subject: [PATCH 342/497] Fix : Moved if statement outside loop. --- src/model/model.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 0c8f99c5..be907d9e 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -219,11 +219,12 @@ export class Model { // addPolicies adds policy rules to the model. public addPolicies(sec: string, ptype: string, rules: string[][]): boolean { const ast = this.model.get(sec)?.get(ptype); + if (!ast) { + return false; + } + for (const rule of rules) { if (!this.hasPolicy(sec, ptype, rule)) { - if (!ast) { - return false; - } ast.policy.push(rule); } else { return false; @@ -250,11 +251,12 @@ export class Model { // removePolicies removes policy rules from the model. public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { const ast = this.model.get(sec)?.get(ptype); + if (!ast) { + return true; + } + for (const rule of rules) { if (this.hasPolicy(sec, ptype, rule)) { - if (!ast) { - continue; - } ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); } else { return false; From e718364095c29315431c049108f8e450b6b8c67d Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 21:53:09 +0530 Subject: [PATCH 343/497] Fix: Fix removePolicy and removePolicies logic. --- src/model/model.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index be907d9e..1cb90c1d 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -239,7 +239,7 @@ export class Model { if (this.hasPolicy(sec, key, rule)) { const ast = this.model.get(sec)?.get(key); if (!ast) { - return true; + return false; } ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); return true; @@ -252,7 +252,7 @@ export class Model { public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { const ast = this.model.get(sec)?.get(ptype); if (!ast) { - return true; + return false; } for (const rule of rules) { From a1071e6de52ef30a75ab4a4d185e45f4ac6cc169 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Thu, 30 Apr 2020 22:01:09 +0530 Subject: [PATCH 344/497] Fix : Added atomicity feature to the operations. --- src/model/model.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 1cb90c1d..78d4f6b6 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -224,13 +224,15 @@ export class Model { } for (const rule of rules) { - if (!this.hasPolicy(sec, ptype, rule)) { - ast.policy.push(rule); - } else { + if (this.hasPolicy(sec, ptype, rule)) { return false; } } + for (const rule of rules) { + ast.policy.push(rule); + } + return true; } @@ -256,13 +258,15 @@ export class Model { } for (const rule of rules) { - if (this.hasPolicy(sec, ptype, rule)) { - ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); - } else { + if (!this.hasPolicy(sec, ptype, rule)) { return false; } } + for (const rule of rules) { + ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); + } + return true; } From 0c56c959fcbd4b8a1452566193abbad532de75a0 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Fri, 1 May 2020 18:44:17 +0530 Subject: [PATCH 345/497] Fix: Concat instead of for loop. --- src/model/model.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/model/model.ts b/src/model/model.ts index 78d4f6b6..950d6dfe 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -229,9 +229,7 @@ export class Model { } } - for (const rule of rules) { - ast.policy.push(rule); - } + ast.policy = ast.policy.concat(rules); return true; } From 50b7b9f0a5ee46b63d21a07367859861157f7955 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sat, 2 May 2020 19:59:20 +0800 Subject: [PATCH 346/497] chore(release): 4.6.0 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 675250bf..cce076b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.5.0", + "version": "4.6.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From ad9df1417cbdb7e0d9065c78e86181d193778adf Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 3 May 2020 23:17:58 +0800 Subject: [PATCH 347/497] feat: add getImplicitUsersForPermission --- src/enforcer.ts | 27 +++++++++++++++++++++++++++ src/model/model.ts | 16 ++++++++++++++++ test/rbacAPI.test.ts | 16 ++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/src/enforcer.ts b/src/enforcer.ts index ea97f55d..57470cf9 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -16,6 +16,7 @@ import { ManagementEnforcer } from './managementEnforcer'; import { Model, newModel } from './model'; import { Adapter, FileAdapter, StringAdapter } from './persist'; import { getLogger } from './log'; +import { arrayRemoveDuplicates } from './util'; /** * Enforcer = ManagementEnforcer + RBAC API. @@ -320,6 +321,32 @@ export class Enforcer extends ManagementEnforcer { return res; } + + /** + * getImplicitUsersForPermission gets implicit users for a permission. + * For example: + * p, admin, data1, read + * p, bob, data1, read + * g, alice, admin + * + * getImplicitUsersForPermission("data1", "read") will get: ["alice", "bob"]. + * Note: only users will be returned, roles (2nd arg in "g") will be excluded. + */ + public async getImplicitUsersForPermission(...permission: string[]): Promise { + const res: string[] = []; + const policySubjects = await this.getAllSubjects(); + const subjects = arrayRemoveDuplicates([...policySubjects, ...this.model.getValuesForFieldInPolicyAllTypes('g', 0)]); + const inherits = this.model.getValuesForFieldInPolicyAllTypes('g', 1); + + for (const user of subjects) { + const allowed = await this.enforce(user, ...permission); + if (allowed) { + res.push(user); + } + } + + return res.filter(n => !inherits.some(m => n === m)); + } } export async function newEnforcerWithClass(enforcer: new () => T, ...params: any[]): Promise { diff --git a/src/model/model.ts b/src/model/model.ts index 950d6dfe..caa96e41 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -332,6 +332,22 @@ export class Model { return util.arrayRemoveDuplicates(ast.policy.map((n: string[]) => n[fieldIndex])); } + // getValuesForFieldInPolicyAllTypes gets all values for a field for all rules in a policy of all ptypes, duplicated values are removed. + public getValuesForFieldInPolicyAllTypes(sec: string, fieldIndex: number): string[] { + const values: string[] = []; + + const ast = this.model.get(sec); + if (!ast) { + return values; + } + + for (const ptype of ast.keys()) { + values.push(...this.getValuesForFieldInPolicy(sec, ptype, fieldIndex)); + } + + return util.arrayRemoveDuplicates(values); + } + // printPolicy prints the policy to log. public printPolicy(): void { logPrint('Policy:'); diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index 78488272..f04735af 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -158,3 +158,19 @@ test('test deleteUser', async () => { expect(await e.getImplicitPermissionsForUser('alice')).toEqual([]); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([]); }); + +test('test getImplicitPermissionsForUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + expect(await e.getImplicitUsersForPermission('data1', 'read')).toEqual(['alice']); + expect(await e.getImplicitUsersForPermission('data1', 'write')).toEqual(['alice']); + expect(await e.getImplicitUsersForPermission('data2', 'read')).toEqual(['alice']); + expect(await e.getImplicitUsersForPermission('data2', 'write')).toEqual(['alice', 'bob']); + + e.clearPolicy(); + + await e.addPolicy('admin', 'data1', 'read'); + await e.addPolicy('bob', 'data1', 'read'); + await e.addGroupingPolicy('alice', 'admin'); + + expect(await e.getImplicitUsersForPermission('data1', 'read')).toEqual(['bob', 'alice']); +}); From 060222bfb908b96f8575c929c39fe9d640865c29 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 3 May 2020 15:44:42 +0000 Subject: [PATCH 348/497] chore(release): 4.7.0 [skip ci] # [4.7.0](https://github.com/casbin/node-casbin/compare/v4.6.0...v4.7.0) (2020-05-03) ### Features * add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/node-casbin/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cce076b5..a0f72582 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.6.0", + "version": "4.7.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 72918bc677e898251dd4375516c31254e79eb6b8 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Tue, 5 May 2020 20:09:10 +0530 Subject: [PATCH 349/497] fix: Added util functions and util tests. Fix: Added util functions and util tests. fix: Changed regex. fix: tests. --- src/util/util.ts | 28 +++++++++++++++++++++++++++- test/util.test.ts | 20 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/util/util.ts b/src/util/util.ts index 7976db17..6bc8eb54 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -83,6 +83,29 @@ function writeFile(path: string, file: string, encoding?: string): any { }); } +const evalReg = new RegExp(/\beval\(([^),]*)\)/g); + +// hasEval determine whether matcher contains function eval +function hasEval(s: string): boolean { + return evalReg.test(s); +} + +// replaceEval replace function eval with the value of its parameters +function replaceEval(s: string, rule: string): string { + return s.replace(evalReg, '(' + rule + ')'); +} + +// getEvalValue returns the parameters of function eval +function getEvalValue(s: string): string[] { + const subMatch: any = s.match(evalReg); + const rules: string[] = []; + for (const rule of subMatch) { + const index: number = rule.search('('); + rules.push(rule.slice(index + 1, -1)); + } + return rules; +} + export { escapeAssertion, removeComments, @@ -93,5 +116,8 @@ export { paramsToString, setEquals, readFile, - writeFile + writeFile, + hasEval, + replaceEval, + getEvalValue }; diff --git a/test/util.test.ts b/test/util.test.ts index 19c97d77..6a39e99e 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -133,3 +133,23 @@ test('test globMatch', () => { expect(util.globMatch('/prefix/subprefix/foobar', '*/foo*')).toEqual(false); expect(util.globMatch('/prefix/subprefix/foobar', '*/foo/*')).toEqual(false); }); + +test('test hasEval', () => { + expect(util.hasEval('eval() && a && b && c')).toEqual(true); + expect(util.hasEval('eval) && a && b && c')).toEqual(false); + expect(util.hasEval('eval)( && a && b && c')).toEqual(false); + expect(util.hasEval('xeval() && a && b && c')).toEqual(false); + expect(util.hasEval('eval(c * (a + b)) && a && b && c')).toEqual(true); +}); + +test('test replaceEval', () => { + expect(util.replaceEval('eval() && a && b && c', 'a')).toEqual('(a) && a && b && c'); + expect(util.replaceEval('eval() && a && b && c', '(a)')).toEqual('((a)) && a && b && c'); +}); + +test('test getEvalValue', () => { + expect(util.getEvalValue('eval(a) && a && b && c')).isEqual(['a']); + expect(util.getEvalValue('a && eval(a) && b && c')).isEqual(['a']); + expect(util.getEvalValue('eval(a) && eval(b) && a && b && c')).isEqual(['a', 'b']); + expect(util.getEvalValue('a && eval(a) && eval(b) && b && c')).isEqual(['a', 'b']); +}); From 5cf950ad25eecfad59281d5ba9d6ddae5cde199e Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Tue, 5 May 2020 20:37:02 +0530 Subject: [PATCH 350/497] fix: Add examples. --- examples/abac_rule_model.conf | 11 +++++++++++ examples/abac_rule_policy.csv | 2 ++ 2 files changed, 13 insertions(+) create mode 100644 examples/abac_rule_model.conf create mode 100644 examples/abac_rule_policy.csv diff --git a/examples/abac_rule_model.conf b/examples/abac_rule_model.conf new file mode 100644 index 00000000..591dd3a6 --- /dev/null +++ b/examples/abac_rule_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub_rule, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = eval(p.sub_rule) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/abac_rule_policy.csv b/examples/abac_rule_policy.csv new file mode 100644 index 00000000..df77bf67 --- /dev/null +++ b/examples/abac_rule_policy.csv @@ -0,0 +1,2 @@ +p, r.sub.Age > 18, /data1, read +p, r.sub.Age < 60, /data2, write \ No newline at end of file From 58242a56f9f72b1a06e4901867f502b73674d640 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Tue, 5 May 2020 20:40:48 +0530 Subject: [PATCH 351/497] fix: compatible types --- src/util/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/util.ts b/src/util/util.ts index 6bc8eb54..bc6cc087 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -97,7 +97,7 @@ function replaceEval(s: string, rule: string): string { // getEvalValue returns the parameters of function eval function getEvalValue(s: string): string[] { - const subMatch: any = s.match(evalReg); + const subMatch: string[] = s.match(evalReg) as string[]; const rules: string[] = []; for (const rule of subMatch) { const index: number = rule.search('('); From 4da52916d27f262a4813d2b4ff78461312b67c22 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Tue, 5 May 2020 20:55:46 +0530 Subject: [PATCH 352/497] fix: tests. --- src/util/util.ts | 2 +- test/util.test.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/util/util.ts b/src/util/util.ts index bc6cc087..1265ccf0 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -100,7 +100,7 @@ function getEvalValue(s: string): string[] { const subMatch: string[] = s.match(evalReg) as string[]; const rules: string[] = []; for (const rule of subMatch) { - const index: number = rule.search('('); + const index: number = rule.indexOf('('); rules.push(rule.slice(index + 1, -1)); } return rules; diff --git a/test/util.test.ts b/test/util.test.ts index 6a39e99e..487f6d39 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -148,8 +148,8 @@ test('test replaceEval', () => { }); test('test getEvalValue', () => { - expect(util.getEvalValue('eval(a) && a && b && c')).isEqual(['a']); - expect(util.getEvalValue('a && eval(a) && b && c')).isEqual(['a']); - expect(util.getEvalValue('eval(a) && eval(b) && a && b && c')).isEqual(['a', 'b']); - expect(util.getEvalValue('a && eval(a) && eval(b) && b && c')).isEqual(['a', 'b']); + expect(util.arrayEquals(util.getEvalValue('eval(a) && a && b && c'), ['a'])); + expect(util.arrayEquals(util.getEvalValue('a && eval(a) && b && c'), ['a'])); + expect(util.arrayEquals(util.getEvalValue('eval(a) && eval(b) && a && b && c'), ['a', 'b'])); + expect(util.arrayEquals(util.getEvalValue('a && eval(a) && eval(b) && b && c'), ['a', 'b'])); }); From 2c8d961596f1a40d3f48ccc6307a6faddf4da6a7 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 7 May 2020 12:51:39 +0800 Subject: [PATCH 353/497] chore: add semantic.yml --- .github/semantic.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/semantic.yml diff --git a/.github/semantic.yml b/.github/semantic.yml new file mode 100644 index 00000000..96f92336 --- /dev/null +++ b/.github/semantic.yml @@ -0,0 +1,2 @@ +# Always validate the PR title AND all the commits +titleAndCommits: true From c6fc48750313b400fb98e12802b3422bfc1921bf Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Wed, 6 May 2020 13:16:53 +0530 Subject: [PATCH 354/497] fix: Added ABAC policy logic to the private enforcer. fix: Added ABAC policy logic to the private enforcer. fix: Typecasting. fix: duplicate code. fix: avoid unknown. --- src/coreEnforcer.ts | 55 ++++++++++++++++++++++++++++++++++--------- src/util/util.ts | 5 +++- test/enforcer.test.ts | 33 +++++++++++++++++++++++++- 3 files changed, 80 insertions(+), 13 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 614b0881..352bdf02 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -18,9 +18,10 @@ import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel } from './model'; import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; -import { generateGFunction } from './util'; +import { generateGFunction, hasEval, getEvalValue, escapeAssertion, replaceEval } from './util'; import { getLogger, logPrint } from './log'; +type Matcher = ((context: object) => Promise) | ((context: object) => any); /** * CoreEnforcer defines the core functionality of an enforcer. */ @@ -29,7 +30,7 @@ export class CoreEnforcer { protected model: Model; protected fm: FunctionMap = FunctionMap.loadFunctionMap(); protected eft: Effector = new DefaultEffector(); - private matcherMap: Map Promise) | ((context: object) => any)> = new Map(); + private matcherMap: Map = new Map(); protected adapter: FilteredAdapter | Adapter; protected watcher: Watcher | null = null; @@ -40,6 +41,17 @@ export class CoreEnforcer { protected autoBuildRoleLinks = true; protected autoNotifyWatcher = true; + private getExpression(asyncCompile: boolean, exp: string): Matcher { + const matcherKey = `${asyncCompile ? 'ASYNC[' : 'SYNC['}${exp}]`; + + let expression = this.matcherMap.get(matcherKey); + if (!expression) { + expression = asyncCompile ? compileAsync(exp) : compile(exp); + this.matcherMap.set(matcherKey, expression); + } + return expression; + } + /** * loadModel reloads the model from the model CONF file. * Because the policy is attached to a model, @@ -279,12 +291,11 @@ export class CoreEnforcer { throw new Error('Unable to find policy_effect in model'); } - const matcherKey = `${asyncCompile ? 'ASYNC[' : 'SYNC['}${expString}]`; + const HasEval: boolean = hasEval(expString); + let expression; - let expression = this.matcherMap.get(matcherKey); - if (!expression) { - expression = asyncCompile ? compileAsync(expString) : compile(expString); - this.matcherMap.set(matcherKey, expression); + if (!HasEval) { + expression = this.getExpression(asyncCompile, expString); } let policyEffects: Effect[]; @@ -315,8 +326,26 @@ export class CoreEnforcer { parameters[token] = p?.policy[i][j]; }); - const context = { ...parameters, ...functions }; - const result = asyncCompile ? await expression(context) : expression(context); + if (HasEval) { + const ruleNames: string[] = getEvalValue(expString); + let expWithRule = expString; + for (const ruleName of ruleNames) { + if (ruleName in parameters) { + const rule = escapeAssertion(parameters[ruleName]); + expWithRule = replaceEval(expWithRule, rule); + } else { + return false; + } + + expression = this.getExpression(asyncCompile, expWithRule); + } + } + + let result; + if (expression != undefined) { + const context = { ...parameters, ...functions }; + result = asyncCompile ? await expression(context) : expression(context); + } switch (typeof result) { case 'boolean': @@ -368,8 +397,12 @@ export class CoreEnforcer { parameters[token] = ''; }); - const context = { ...parameters, ...functions }; - const result = asyncCompile ? await expression(context) : expression(context); + let result = false; + + if (expression != undefined) { + const context = { ...parameters, ...functions }; + result = asyncCompile ? await expression(context) : expression(context); + } if (result) { policyEffects[0] = Effect.Allow; diff --git a/src/util/util.ts b/src/util/util.ts index 1265ccf0..7cd34298 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -97,8 +97,11 @@ function replaceEval(s: string, rule: string): string { // getEvalValue returns the parameters of function eval function getEvalValue(s: string): string[] { - const subMatch: string[] = s.match(evalReg) as string[]; + const subMatch = s.match(evalReg); const rules: string[] = []; + if (!subMatch) { + return []; + } for (const rule of subMatch) { const index: number = rule.indexOf('('); rules.push(rule.slice(index + 1, -1)); diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 2bb0f0c3..0a9aa454 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -16,7 +16,7 @@ import { readFileSync } from 'fs'; import { newModel, newEnforcer, Enforcer, FileAdapter, StringAdapter, Util } from '../src'; -async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): Promise { +async function testEnforce(e: Enforcer, sub: any, obj: string, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } @@ -535,3 +535,34 @@ describe('Unimplemented String Adapter methods', () => { await expect(a.removeFilteredPolicy('', '', 0, '')).rejects.toThrow('not implemented'); }); }); + +class TestSub { + Name: string; + Age: number; + + constructor(name: string, age: number) { + this.Name = name; + this.Age = age; + } +} + +test('test ABAC Scaling', async () => { + const e = await newEnforcer('examples/abac_rule_model.conf', 'examples/abac_rule_policy.csv'); + + const sub1 = new TestSub('alice', 16); + const sub2 = new TestSub('alice', 20); + const sub3 = new TestSub('alice', 65); + + await testEnforce(e, sub1, '/data1', 'read', false); + await testEnforce(e, sub1, '/data2', 'read', false); + await testEnforce(e, sub1, '/data1', 'write', false); + await testEnforce(e, sub1, '/data2', 'write', true); + await testEnforce(e, sub2, '/data1', 'read', true); + await testEnforce(e, sub2, '/data2', 'read', false); + await testEnforce(e, sub2, '/data1', 'write', false); + await testEnforce(e, sub2, '/data2', 'write', true); + await testEnforce(e, sub3, '/data1', 'read', true); + await testEnforce(e, sub3, '/data2', 'read', false); + await testEnforce(e, sub3, '/data1', 'write', false); + await testEnforce(e, sub3, '/data2', 'write', false); +}); From 0e3c49c54b4bb7affa6e0e030ed342bb6cc717d2 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 8 May 2020 11:39:49 +0000 Subject: [PATCH 355/497] chore(release): 4.7.1 [skip ci] ## [4.7.1](https://github.com/casbin/node-casbin/compare/v4.7.0...v4.7.1) (2020-05-08) ### Bug Fixes * Add examples. ([5cf950a](https://github.com/casbin/node-casbin/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) * Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/node-casbin/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) * Added util functions and util tests. ([72918bc](https://github.com/casbin/node-casbin/commit/72918bc677e898251dd4375516c31254e79eb6b8)) * compatible types ([58242a5](https://github.com/casbin/node-casbin/commit/58242a56f9f72b1a06e4901867f502b73674d640)) * tests. ([4da5291](https://github.com/casbin/node-casbin/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a0f72582..1f0440f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.7.0", + "version": "4.7.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From d0fc49fb12c7cbb9f985d444c1ed7613ded0121b Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sat, 9 May 2020 13:40:52 +0800 Subject: [PATCH 356/497] fix: stackoverflow in getImplicitRolesForUser --- examples/issues/node_casbin_150_model.conf | 16 ++++++++++++++++ examples/issues/node_casbin_150_policy.csv | 5 +++++ src/enforcer.ts | 20 ++++++++++++-------- test/model.test.ts | 12 +++++++++++- 4 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 examples/issues/node_casbin_150_model.conf create mode 100644 examples/issues/node_casbin_150_policy.csv diff --git a/examples/issues/node_casbin_150_model.conf b/examples/issues/node_casbin_150_model.conf new file mode 100644 index 00000000..8f7f7cf9 --- /dev/null +++ b/examples/issues/node_casbin_150_model.conf @@ -0,0 +1,16 @@ +# https://github.com/casbin/node-casbin/issues/150 +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && regexMatch(r.act, p.act) + diff --git a/examples/issues/node_casbin_150_policy.csv b/examples/issues/node_casbin_150_policy.csv new file mode 100644 index 00000000..623384f8 --- /dev/null +++ b/examples/issues/node_casbin_150_policy.csv @@ -0,0 +1,5 @@ +p, book_admin , /book/1, GET +p, pen_admin , /pen/1, GET + +g, *, book_admin +g, *, pen_admin diff --git a/src/enforcer.ts b/src/enforcer.ts index 57470cf9..3811169d 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -280,16 +280,20 @@ export class Enforcer extends ManagementEnforcer { * But getImplicitRolesForUser("alice") will get: ["role:admin", "role:user"]. */ public async getImplicitRolesForUser(name: string, ...domain: string[]): Promise { - const res: string[] = []; - const roles = await this.rm.getRoles(name, ...domain); - res.push(...roles); - - for (const n of roles) { - const role = await this.getImplicitRolesForUser(n, ...domain); - res.push(...role); + const res = new Set(); + const q = [name]; + let n: string | undefined; + while ((n = q.shift()) != undefined) { + const role = await this.getRoleManager().getRoles(n, ...domain); + role.forEach(r => { + if (!res.has(r)) { + res.add(r); + q.push(r); + } + }); } - return res; + return Array.from(res); } /** diff --git a/test/model.test.ts b/test/model.test.ts index cc320919..77b7f8b6 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -14,7 +14,7 @@ import * as _ from 'lodash'; import { DefaultRoleManager, Enforcer, newEnforcer, newModel } from '../src'; -import { keyMatch2Func, keyMatch3Func } from '../src/util'; +import { keyMatch2Func, keyMatch3Func, keyMatchFunc } from '../src/util'; async function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); @@ -334,3 +334,13 @@ test('TestRBACModelWithPattern', async () => { await testEnforce(e, 'bob', '/pen2/1', 'GET', true); await testEnforce(e, 'bob', '/pen2/2', 'GET', true); }); + +test('TestNodeCasbin150', async () => { + const e = await newEnforcer('examples/issues/node_casbin_150_model.conf', 'examples/issues/node_casbin_150_policy.csv'); + + const rm = e.getRoleManager() as DefaultRoleManager; + await rm.addMatchingFunc('KeyMatch', keyMatchFunc); + await e.buildRoleLinks(); + + await e.getImplicitRolesForUser('alice'); +}); From 85f11efdebfbc7fb2cc0ef368ed079fa8d94ea5d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 9 May 2020 12:01:17 +0000 Subject: [PATCH 357/497] chore(release): 4.7.2 [skip ci] ## [4.7.2](https://github.com/casbin/node-casbin/compare/v4.7.1...v4.7.2) (2020-05-09) ### Bug Fixes * stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/node-casbin/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1f0440f3..1defb468 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.7.1", + "version": "4.7.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 57de7b2f1d21ceebb7097552c86721d94cac2275 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 17 May 2020 22:44:46 +0800 Subject: [PATCH 358/497] feat: improve effector for improve performance BREAKING CHANGE: - provides a new interface for Effector --- src/coreEnforcer.ts | 51 +++++++++------------- src/effect/defaultEffector.ts | 37 +++------------- src/effect/defaultEffectorStream.ts | 68 +++++++++++++++++++++++++++++ src/effect/effector.ts | 5 ++- src/effect/effectorStream.ts | 22 ++++++++++ src/effect/index.ts | 4 +- 6 files changed, 122 insertions(+), 65 deletions(-) create mode 100644 src/effect/defaultEffectorStream.ts create mode 100644 src/effect/effectorStream.ts diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 352bdf02..081c1563 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -12,16 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { compileAsync, compile } from 'expression-eval'; +import { compile, compileAsync } from 'expression-eval'; import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel } from './model'; import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; -import { generateGFunction, hasEval, getEvalValue, escapeAssertion, replaceEval } from './util'; +import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval } from './util'; import { getLogger, logPrint } from './log'; type Matcher = ((context: object) => Promise) | ((context: object) => any); + /** * CoreEnforcer defines the core functionality of an enforcer. */ @@ -286,8 +287,8 @@ export class CoreEnforcer { throw new Error('Unable to find matchers in model'); } - const effect = this.model.model.get('e')?.get('e')?.value; - if (!effect) { + const effectExpr = this.model.model.get('e')?.get('e')?.value; + if (!effectExpr) { throw new Error('Unable to find policy_effect in model'); } @@ -298,19 +299,15 @@ export class CoreEnforcer { expression = this.getExpression(asyncCompile, expString); } - let policyEffects: Effect[]; - let matcherResults: number[]; - const p = this.model.model.get('p')?.get('p'); const policyLen = p?.policy?.length; const rTokens = this.model.model.get('r')?.get('r')?.tokens; const rTokensLen = rTokens?.length; - if (policyLen && policyLen !== 0) { - policyEffects = new Array(policyLen); - matcherResults = new Array(policyLen); + const effectStream = this.eft.newStream(effectExpr); + if (policyLen && policyLen !== 0) { for (let i = 0; i < policyLen; i++) { const parameters: { [key: string]: any } = {}; @@ -347,19 +344,16 @@ export class CoreEnforcer { result = asyncCompile ? await expression(context) : expression(context); } + let eftRes: Effect; switch (typeof result) { case 'boolean': - if (!result) { - policyEffects[i] = Effect.Indeterminate; - continue; - } + eftRes = result ? Effect.Allow : Effect.Indeterminate; break; case 'number': if (result === 0) { - policyEffects[i] = Effect.Indeterminate; - continue; + eftRes = Effect.Indeterminate; } else { - matcherResults[i] = result; + eftRes = result; } break; default: @@ -367,26 +361,23 @@ export class CoreEnforcer { } const eft = parameters['p_eft']; - if (eft) { + if (eft && eftRes === Effect.Allow) { if (eft === 'allow') { - policyEffects[i] = Effect.Allow; + eftRes = Effect.Allow; } else if (eft === 'deny') { - policyEffects[i] = Effect.Deny; + eftRes = Effect.Deny; } else { - policyEffects[i] = Effect.Indeterminate; + eftRes = Effect.Indeterminate; } - } else { - policyEffects[i] = Effect.Allow; } - if (effect === 'priority(p_eft) || deny') { + const [res, done] = effectStream.pushEffect(eftRes); + + if (done) { break; } } } else { - policyEffects = new Array(1); - matcherResults = new Array(1); - const parameters: { [key: string]: any } = {}; rTokens?.forEach((token, j): void => { @@ -405,13 +396,13 @@ export class CoreEnforcer { } if (result) { - policyEffects[0] = Effect.Allow; + effectStream.pushEffect(Effect.Allow); } else { - policyEffects[0] = Effect.Indeterminate; + effectStream.pushEffect(Effect.Indeterminate); } } - const res = this.eft.mergeEffects(effect, policyEffects, matcherResults); + const res = effectStream.current(); // only generate the request --> result string if the message // is going to be logged. diff --git a/src/effect/defaultEffector.ts b/src/effect/defaultEffector.ts index f6cd26fb..0ee10bba 100644 --- a/src/effect/defaultEffector.ts +++ b/src/effect/defaultEffector.ts @@ -12,42 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Effect, Effector } from './effector'; +import { Effector } from './effector'; +import { EffectorStream } from './effectorStream'; +import { DefaultEffectorStream } from './defaultEffectorStream'; /** * DefaultEffector is default effector for Casbin. */ export class DefaultEffector implements Effector { - /** - * mergeEffects merges all matching results collected by the enforcer into a single decision. - * @param {string} expr - * @param {Effect[]} effects - * @param {number[]} results - * @returns {boolean} - */ - public mergeEffects(expr: string, effects: Effect[], results: number[]): boolean { - let result = false; - - if (expr === 'some(where (p_eft == allow))') { - result = effects.some(n => n === Effect.Allow); - } else if (expr === '!some(where (p_eft == deny))') { - result = !effects.some(n => n === Effect.Deny); - } else if (expr === 'some(where (p_eft == allow)) && !some(where (p_eft == deny))') { - result = false; - for (const eft of effects) { - if (eft === Effect.Allow) { - result = true; - } else if (eft === Effect.Deny) { - result = false; - break; - } - } - } else if (expr === 'priority(p_eft) || deny') { - result = effects.some(n => n !== Effect.Indeterminate && n === Effect.Allow); - } else { - throw new Error('unsupported effect'); - } - - return result; + newStream(expr: string): EffectorStream { + return new DefaultEffectorStream(expr); } } diff --git a/src/effect/defaultEffectorStream.ts b/src/effect/defaultEffectorStream.ts new file mode 100644 index 00000000..0df148ec --- /dev/null +++ b/src/effect/defaultEffectorStream.ts @@ -0,0 +1,68 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { EffectorStream } from './effectorStream'; +import { Effect } from './effector'; + +/** + * DefaultEffectorStream is the default implementation of EffectorStream. + */ +export class DefaultEffectorStream implements EffectorStream { + private done = false; + private res = false; + private readonly expr: string; + + constructor(expr: string) { + this.expr = expr; + } + + current(): boolean { + return this.res; + } + + public pushEffect(eft: Effect): [boolean, boolean] { + switch (this.expr) { + case 'some(where (p_eft == allow))': + if (eft == Effect.Allow) { + this.res = true; + this.done = true; + } + break; + case '!some(where (p_eft == deny))': + this.res = true; + if (eft == Effect.Deny) { + this.res = false; + this.done = true; + } + break; + case 'some(where (p_eft == allow)) && !some(where (p_eft == deny))': + if (eft == Effect.Allow) { + this.res = true; + } else if (eft == Effect.Deny) { + this.res = false; + this.done = true; + } + break; + case 'priority(p_eft) || deny': + if (eft !== Effect.Indeterminate) { + this.res = eft === Effect.Allow; + this.done = true; + } + break; + default: + throw new Error('unsupported effect'); + } + return [this.res, this.done]; + } +} diff --git a/src/effect/effector.ts b/src/effect/effector.ts index 05fa2fd2..f353b76d 100644 --- a/src/effect/effector.ts +++ b/src/effect/effector.ts @@ -14,6 +14,8 @@ // Effect is the result for a policy rule. // Values for policy effect. +import { EffectorStream } from './effectorStream'; + export enum Effect { Allow = 1, Indeterminate, @@ -22,6 +24,5 @@ export enum Effect { // Effector is the interface for Casbin effectors. export interface Effector { - // mergeEffects merges all matching results collected by the enforcer into a single decision. - mergeEffects(expr: string, effects: Effect[], results: number[]): boolean; + newStream(expr: string): EffectorStream; } diff --git a/src/effect/effectorStream.ts b/src/effect/effectorStream.ts new file mode 100644 index 00000000..185734b1 --- /dev/null +++ b/src/effect/effectorStream.ts @@ -0,0 +1,22 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Effect } from './effector'; + +// EffectorStream provides a stream interface +export interface EffectorStream { + current(): boolean; + + pushEffect(eft: Effect): [boolean, boolean]; +} diff --git a/src/effect/index.ts b/src/effect/index.ts index 0b92b928..dfbaf62d 100644 --- a/src/effect/index.ts +++ b/src/effect/index.ts @@ -12,5 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -export * from './defaultEffector'; export * from './effector'; +export * from './effectorStream'; +export * from './defaultEffector'; +export * from './defaultEffectorStream'; From b5650055a6e8c47da49dc3b7eb8646bb5bda90d9 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 18 May 2020 00:37:32 +0800 Subject: [PATCH 359/497] feat: add BuildIncrementalRoleLinks BREAKING CHANGE: **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] --- src/coreEnforcer.ts | 12 +++++++++- src/internalEnforcer.ts | 31 +++++++++++++++++++++---- src/managementEnforcer.ts | 40 ++++---------------------------- src/model/assertion.ts | 49 +++++++++++++++++++++++++-------------- src/model/model.ts | 48 ++++++++++++++++++++++++++++---------- 5 files changed, 110 insertions(+), 70 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 081c1563..525d8d8d 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -15,7 +15,7 @@ import { compile, compileAsync } from 'expression-eval'; import { DefaultEffector, Effect, Effector } from './effect'; -import { FunctionMap, Model, newModel } from './model'; +import { FunctionMap, Model, newModel, PolicyOp } from './model'; import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval } from './util'; @@ -260,6 +260,16 @@ export class CoreEnforcer { return this.buildRoleLinksInternal(); } + /** + * buildIncrementalRoleLinks provides incremental build the role inheritance relations. + * @param op policy operation + * @param ptype g + * @param rules policies + */ + public async buildIncrementalRoleLinks(op: PolicyOp, ptype: string, rules: string[][]): Promise { + await this.model.buildIncrementalRoleLinks(this.rm, op, 'g', ptype, rules); + } + protected async buildRoleLinksInternal(): Promise { await this.rm.clear(); await this.model.buildRoleLinks(this.rm); diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 054a445e..e2e801c8 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -14,6 +14,7 @@ import { CoreEnforcer } from './coreEnforcer'; import { BatchAdapter } from './persist/batchAdapter'; +import { PolicyOp } from './model'; /** * InternalEnforcer = CoreEnforcer + Internal API. @@ -42,7 +43,11 @@ export class InternalEnforcer extends CoreEnforcer { this.watcher.update(); } - return this.model.addPolicy(sec, ptype, rule); + const ok = this.model.addPolicy(sec, ptype, rule); + if (sec === 'g' && ok) { + await this.buildIncrementalRoleLinks(PolicyOp.PolicyAdd, ptype, [rule]); + } + return ok; } // addPolicies adds rules to the current policy. @@ -70,7 +75,11 @@ export class InternalEnforcer extends CoreEnforcer { this.watcher.update(); } - return this.model.addPolicies(sec, ptype, rules); + const [ok, effects] = await this.model.addPolicies(sec, ptype, rules); + if (sec === 'g' && ok && effects?.length) { + await this.buildIncrementalRoleLinks(PolicyOp.PolicyAdd, ptype, effects); + } + return ok; } /** @@ -96,7 +105,11 @@ export class InternalEnforcer extends CoreEnforcer { this.watcher.update(); } - return this.model.removePolicy(sec, ptype, rule); + const ok = await this.model.removePolicy(sec, ptype, rule); + if (sec === 'g' && ok) { + await this.buildIncrementalRoleLinks(PolicyOp.PolicyRemove, ptype, [rule]); + } + return ok; } // removePolicies removes rules from the current policy. @@ -123,7 +136,11 @@ export class InternalEnforcer extends CoreEnforcer { this.watcher.update(); } - return this.model.removePolicies(sec, ptype, rules); + const [ok, effects] = this.model.removePolicies(sec, ptype, rules); + if (sec === 'g' && ok && effects?.length) { + await this.buildIncrementalRoleLinks(PolicyOp.PolicyRemove, ptype, effects); + } + return ok; } /** @@ -145,6 +162,10 @@ export class InternalEnforcer extends CoreEnforcer { this.watcher.update(); } - return this.model.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); + const [ok, effects] = this.model.removeFilteredPolicy(sec, ptype, fieldIndex, ...fieldValues); + if (sec === 'g' && ok && effects?.length) { + await this.buildIncrementalRoleLinks(PolicyOp.PolicyRemove, ptype, effects); + } + return ok; } } diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index 7cdb33a0..b86f5b56 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -397,13 +397,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - const ruleadded = await this.addPolicyInternal('g', ptype, params); - - if (this.autoBuildRoleLinks) { - await this.buildRoleLinksInternal(); - } - - return ruleadded; + return this.addPolicyInternal('g', ptype, params); } /** @@ -416,13 +410,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async addNamedGroupingPolicies(ptype: string, rules: string[][]): Promise { - const rulesAdded = await this.addPoliciesInternal('g', ptype, rules); - - if (this.autoBuildRoleLinks) { - await this.buildRoleLinksInternal(); - } - - return rulesAdded; + return this.addPoliciesInternal('g', ptype, rules); } /** @@ -465,13 +453,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - const ruleRemoved = await this.removePolicyInternal('g', ptype, params); - - if (this.autoBuildRoleLinks) { - await this.buildRoleLinksInternal(); - } - - return ruleRemoved; + return this.removePolicyInternal('g', ptype, params); } /** @@ -482,13 +464,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeNamedGroupingPolicies(ptype: string, rules: string[][]): Promise { - const rulesRemoved = this.removePoliciesInternal('g', ptype, rules); - - if (this.autoBuildRoleLinks) { - await this.buildRoleLinksInternal(); - } - - return rulesRemoved; + return this.removePoliciesInternal('g', ptype, rules); } /** @@ -501,13 +477,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @return succeeds or not. */ public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - const ruleRemoved = await this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); - - if (this.autoBuildRoleLinks) { - await this.buildRoleLinksInternal(); - } - - return ruleRemoved; + return this.removeFilteredPolicyInternal('g', ptype, fieldIndex, fieldValues); } /** diff --git a/src/model/assertion.ts b/src/model/assertion.ts index fa0b2ef5..38bd7faa 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -15,6 +15,7 @@ import * as rbac from '../rbac'; import * as _ from 'lodash'; import { logPrint } from '../log'; +import { PolicyOp } from './model'; // Assertion represents an expression in a section of the model. // For example: r = sub, obj, act @@ -33,33 +34,47 @@ export class Assertion { this.value = ''; this.tokens = []; this.policy = []; - this.rm = new rbac.DefaultRoleManager(0); + this.rm = new rbac.DefaultRoleManager(10); } - public async buildRoleLinks(rm: rbac.RoleManager): Promise { + public async buildIncrementalRoleLinks(rm: rbac.RoleManager, op: PolicyOp, rules: string[][]): Promise { this.rm = rm; const count = _.words(this.value, /_/g).length; - for (const rule of this.policy) { - if (count < 2) { - throw new Error('the number of "_" in role definition should be at least 2'); - } - + if (count < 2) { + throw new Error('the number of "_" in role definition should be at least 2'); + } + for (let rule of rules) { if (rule.length < count) { throw new Error('grouping policy elements do not meet role definition'); } - - if (count === 2) { - // error intentionally ignored - await this.rm.addLink(rule[0], rule[1]); - } else if (count === 3) { - // error intentionally ignored - await this.rm.addLink(rule[0], rule[1], rule[2]); - } else if (count === 4) { - // error intentionally ignored - await this.rm.addLink(rule[0], rule[1], rule[2], rule[3]); + if (rule.length > count) { + rule = rule.slice(0, count); + } + switch (op) { + case PolicyOp.PolicyAdd: + await this.rm.addLink(rule[0], rule[1], ...rule.slice(2)); + break; + case PolicyOp.PolicyRemove: + await this.rm.deleteLink(rule[0], rule[1], ...rule.slice(2)); + break; + default: + throw new Error('unsupported operation'); } } + } + public async buildRoleLinks(rm: rbac.RoleManager): Promise { + this.rm = rm; + const count = _.words(this.value, /_/g).length; + if (count < 2) { + throw new Error('the number of "_" in role definition should be at least 2'); + } + for (let rule of this.policy) { + if (rule.length > count) { + rule = rule.slice(0, count); + } + await this.rm.addLink(rule[0], rule[1], ...rule.slice(2)); + } logPrint(`Role links for: ${this.key}`); await this.rm.printRoles(); } diff --git a/src/model/model.ts b/src/model/model.ts index caa96e41..04b23fdd 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -27,6 +27,11 @@ export const sectionNameMap: { [index: string]: string } = { m: 'matchers' }; +export enum PolicyOp { + PolicyAdd, + PolicyRemove +} + export const requiredSections = ['r', 'p', 'e', 'm']; export class Model { @@ -160,6 +165,16 @@ export class Model { }); } + // buildIncrementalRoleLinks provides incremental build the role inheritance relations. + public async buildIncrementalRoleLinks(rm: rbac.RoleManager, op: PolicyOp, sec: string, ptype: string, rules: string[][]): Promise { + if (sec === 'g') { + await this.model + .get(sec) + ?.get(ptype) + ?.buildIncrementalRoleLinks(rm, op, rules); + } + } + // buildRoleLinks initializes the roles in RBAC. public async buildRoleLinks(rm: rbac.RoleManager): Promise { const astMap = this.model.get('g'); @@ -217,21 +232,21 @@ export class Model { } // addPolicies adds policy rules to the model. - public addPolicies(sec: string, ptype: string, rules: string[][]): boolean { + public addPolicies(sec: string, ptype: string, rules: string[][]): [boolean, string[][]] { const ast = this.model.get(sec)?.get(ptype); if (!ast) { - return false; + return [false, []]; } for (const rule of rules) { if (this.hasPolicy(sec, ptype, rule)) { - return false; + return [false, []]; } } ast.policy = ast.policy.concat(rules); - return true; + return [true, rules]; } // removePolicy removes a policy rule from the model. @@ -249,23 +264,30 @@ export class Model { } // removePolicies removes policy rules from the model. - public removePolicies(sec: string, ptype: string, rules: string[][]): boolean { + public removePolicies(sec: string, ptype: string, rules: string[][]): [boolean, string[][]] { + const effects: string[][] = []; const ast = this.model.get(sec)?.get(ptype); if (!ast) { - return false; + return [false, []]; } for (const rule of rules) { if (!this.hasPolicy(sec, ptype, rule)) { - return false; + return [false, []]; } } for (const rule of rules) { - ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); + ast.policy = _.filter(ast.policy, (r: string[]) => { + const equals = util.arrayEquals(rule, r); + if (equals) { + effects.push(r); + } + return !equals; + }); } - return true; + return [true, effects]; } // getFilteredPolicy gets rules based on field filters from a policy. @@ -294,12 +316,13 @@ export class Model { } // removeFilteredPolicy removes policy rules based on field filters from the model. - public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): boolean { + public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): [boolean, string[][]] { const res = []; + const effects = []; let bool = false; const ast = this.model.get(sec)?.get(key); if (!ast) { - return bool; + return [false, []]; } for (const rule of ast.policy) { let matched = true; @@ -313,13 +336,14 @@ export class Model { if (matched) { bool = true; + effects.push(rule); } else { res.push(rule); } } ast.policy = res; - return bool; + return [bool, effects]; } // getValuesForFieldInPolicy gets all values for a field for all rules in a policy, duplicated values are removed. From 5984ba5e4973201599d91387c558215d0d1fa42c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 18 May 2020 01:36:42 +0000 Subject: [PATCH 360/497] chore(release): 5.0.0 [skip ci] # [5.0.0](https://github.com/casbin/node-casbin/compare/v4.7.2...v5.0.0) (2020-05-18) ### Features * add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/node-casbin/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) * improve effector for improve performance ([57de7b2](https://github.com/casbin/node-casbin/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) ### BREAKING CHANGES * **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] * - provides a new interface for Effector --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1defb468..111cd5a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.7.2", + "version": "5.0.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From c97cb26441d79316960a0464e8d56918859d969c Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 20 May 2020 21:41:53 +0800 Subject: [PATCH 361/497] fix: support comments after expression --- src/config.ts | 22 ++++++++++++++++++---- src/model/model.ts | 4 ++-- test/config/config.test.ts | 7 +++++++ test/config/testini.ini | 4 ++-- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/config.ts b/src/config.ts index dec91316..ad8c7ecf 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,14 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. import { readFileSync } from 'fs'; +import { removeComments } from './util'; // ConfigInterface defines the behavior of a Config implementation export interface ConfigInterface { getString(key: string): string; + getStrings(key: string): string[]; + getBool(key: string): boolean; + getInt(key: string): number; + getFloat(key: string): number; + set(key: string, value: string): void; } @@ -92,15 +98,23 @@ export class Config implements ConfigInterface { let currentLine = ''; lines.forEach((n, index) => { + let commentPos = n.indexOf(Config.DEFAULT_COMMENT); + if (commentPos > -1) { + n = n.slice(0, commentPos); + } + commentPos = n.indexOf(Config.DEFAULT_COMMENT_SEM); + if (commentPos > -1) { + n = n.slice(0, commentPos); + } + const line = n.trim(); - const lineNumber = index + 1; if (!line) { return; } - if (line.startsWith(Config.DEFAULT_COMMENT) || line.startsWith(Config.DEFAULT_COMMENT_SEM)) { - return; - } else if (line.startsWith('[') && line.endsWith(']')) { + const lineNumber = index + 1; + + if (line.startsWith('[') && line.endsWith(']')) { if (currentLine.length !== 0) { this.write(section, lineNumber - 1, currentLine); currentLine = ''; diff --git a/src/model/model.ts b/src/model/model.ts index 04b23fdd..419249fb 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -96,7 +96,7 @@ export class Model { value = value.replace(n, `$<${index}>`); }); - value = util.removeComments(util.escapeAssertion(value)); + value = util.escapeAssertion(value); stringArguments.forEach((n, index) => { value = value.replace(`$<${index}>`, n); @@ -104,7 +104,7 @@ export class Model { ast.value = value; } else { - ast.value = util.removeComments(util.escapeAssertion(value)); + ast.value = util.escapeAssertion(value); } const nodeMap = this.model.get(sec); diff --git a/test/config/config.test.ts b/test/config/config.test.ts index 5c846528..d2a50ac8 100644 --- a/test/config/config.test.ts +++ b/test/config/config.test.ts @@ -22,4 +22,11 @@ describe('multi-line test', () => { it('should config.get("multi5::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { expect(config.get('multi5::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); }); + + it('should config.get("mysql::mysql.master.host") to equal 10.0.0.1', function() { + expect(config.get('mysql::mysql.master.host')).toEqual('10.0.0.1'); + }); + it('should config.get("mysql::mysql.master.user") to equal root', function() { + expect(config.get('mysql::mysql.master.user')).toEqual('root'); + }); }); diff --git a/test/config/testini.ini b/test/config/testini.ini index 59a69873..94a478b0 100644 --- a/test/config/testini.ini +++ b/test/config/testini.ini @@ -13,8 +13,8 @@ mysql.dev.user = root mysql.dev.pass = 123456 mysql.dev.db = test -mysql.master.host = 10.0.0.1 -mysql.master.user = root +mysql.master.host = 10.0.0.1 # host # 10.0.0.1 +mysql.master.user = root ; user name mysql.master.pass = 89dds)2$#d mysql.master.db = act From 4a6c06ecc5c2acbc3dec8647f493631ae1bee44b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 22 May 2020 07:10:30 +0000 Subject: [PATCH 362/497] chore(release): 5.0.1 [skip ci] ## [5.0.1](https://github.com/casbin/node-casbin/compare/v5.0.0...v5.0.1) (2020-05-22) ### Bug Fixes * support comments after expression ([c97cb26](https://github.com/casbin/node-casbin/commit/c97cb26441d79316960a0464e8d56918859d969c)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 111cd5a8..7c1fd16b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.0", + "version": "5.0.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 7179b17f7733f72fdd1d13ca6a7818415deb6d9c Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Sun, 24 May 2020 23:02:45 +0530 Subject: [PATCH 363/497] fix: Merge conflicts. --- package-lock.json | 14233 ++++++++++++++++++++++++++++++++++++++++++ src/coreEnforcer.ts | 4 +- 2 files changed, 14235 insertions(+), 2 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..255e6eb5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,14233 @@ +{ + "name": "casbin", + "version": "4.4.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/core": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", + "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.6", + "@babel/parser": "^7.9.6", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "dev": true, + "requires": { + "@babel/types": "^7.9.6", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/helpers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", + "dev": true + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/runtime": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "dev": true + } + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@commitlint/execute-rule": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-8.3.4.tgz", + "integrity": "sha512-f4HigYjeIBn9f7OuNv5zh2y5vWaAhNFrfeul8CRJDy82l3Y+09lxOTGxfF3uMXKrZq4LmuK6qvvRCZ8mUrVvzQ==", + "dev": true, + "optional": true + }, + "@commitlint/load": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-8.3.5.tgz", + "integrity": "sha512-poF7R1CtQvIXRmVIe63FjSQmN9KDqjRtU5A6hxqXBga87yB2VUJzic85TV6PcQc+wStk52cjrMI+g0zFx+Zxrw==", + "dev": true, + "optional": true, + "requires": { + "@commitlint/execute-rule": "^8.3.4", + "@commitlint/resolve-extends": "^8.3.5", + "babel-runtime": "^6.23.0", + "chalk": "2.4.2", + "cosmiconfig": "^5.2.0", + "lodash": "4.17.15", + "resolve-from": "^5.0.0" + } + }, + "@commitlint/resolve-extends": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-8.3.5.tgz", + "integrity": "sha512-nHhFAK29qiXNe6oH6uG5wqBnCR+BQnxlBW/q5fjtxIaQALgfoNLHwLS9exzbIRFqwJckpR6yMCfgMbmbAOtklQ==", + "dev": true, + "optional": true, + "requires": { + "import-fresh": "^3.0.0", + "lodash": "4.17.15", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + } + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@octokit/auth-token": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz", + "integrity": "sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.1.tgz", + "integrity": "sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A==", + "dev": true, + "requires": { + "@octokit/types": "^2.11.1", + "is-plain-object": "^3.0.0", + "universal-user-agent": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", + "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "dev": true, + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + }, + "universal-user-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz", + "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + } + } + }, + "@octokit/plugin-paginate-rest": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz", + "integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz", + "integrity": "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==", + "dev": true + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz", + "integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.2.tgz", + "integrity": "sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.0.0", + "@octokit/types": "^2.11.1", + "deprecation": "^2.0.0", + "is-plain-object": "^3.0.0", + "node-fetch": "^2.3.0", + "once": "^1.4.0", + "universal-user-agent": "^5.0.0" + }, + "dependencies": { + "@octokit/request-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.0.tgz", + "integrity": "sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "is-plain-object": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", + "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "dev": true, + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + }, + "universal-user-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz", + "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + } + } + }, + "@octokit/request-error": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", + "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "16.43.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.1.tgz", + "integrity": "sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.0", + "@octokit/plugin-paginate-rest": "^1.1.1", + "@octokit/plugin-request-log": "^1.0.0", + "@octokit/plugin-rest-endpoint-methods": "2.4.0", + "@octokit/request": "^5.2.0", + "@octokit/request-error": "^1.0.2", + "atob-lite": "^2.0.0", + "before-after-hook": "^2.0.0", + "btoa-lite": "^1.0.0", + "deprecation": "^2.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", + "universal-user-agent": "^4.0.0" + } + }, + "@octokit/types": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.12.2.tgz", + "integrity": "sha512-1GHLI/Jll3j6F0GbYyZPFTcHZMGjAiRfkTEoRUyaVVk2IWbDdwEiClAJvXzfXCDayuGSNCqAUH8lpjZtqW9GDw==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + }, + "@samverschueren/stream-to-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", + "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "dev": true, + "requires": { + "any-observable": "^0.3.0" + } + }, + "@semantic-release/changelog": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-3.0.6.tgz", + "integrity": "sha512-9TqPL/VarLLj6WkUqbIqFiY3nwPmLuKFHy9fe/LamAW5s4MEW/ig9zW9vzYGOUVtWdErGJ1J62E3Edkamh3xaQ==", + "dev": true, + "requires": { + "@semantic-release/error": "^2.1.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^8.0.0", + "lodash": "^4.17.4" + } + }, + "@semantic-release/commit-analyzer": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-6.3.3.tgz", + "integrity": "sha512-Pyv1ZL2u5AIOY4YbxFCAB5J1PEh5yON8ylbfiPiriDGGW6Uu1U3Y8lysMtWu+FUD5x7tSnyIzhqx0+fxPxqbgw==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.0.7", + "debug": "^4.0.0", + "import-from": "^3.0.0", + "lodash": "^4.17.4" + } + }, + "@semantic-release/error": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", + "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", + "dev": true + }, + "@semantic-release/git": { + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-7.0.18.tgz", + "integrity": "sha512-VwnsGUXpNdvPcsq05BQyLBZxGUlEiJCMKNi8ttLvZZAhjI1mAp9dwypOeyxSJ5eFQ+iGMBLdoKF1LL0pmA/d0A==", + "dev": true, + "requires": { + "@semantic-release/error": "^2.1.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^3.2.0", + "fs-extra": "^8.0.0", + "globby": "^10.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + } + }, + "@semantic-release/github": { + "version": "5.5.8", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.5.8.tgz", + "integrity": "sha512-YxbBXbCThs/Xk3E4QU01AMIUM8eb0UTvjHJtclTDR3/DEW7kUpmXQqBMnSh3qCTuk4scRFIoaF0fGU/0xByZug==", + "dev": true, + "requires": { + "@octokit/rest": "^16.27.0", + "@semantic-release/error": "^2.2.0", + "aggregate-error": "^3.0.0", + "bottleneck": "^2.18.1", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "fs-extra": "^8.0.0", + "globby": "^10.0.0", + "http-proxy-agent": "^3.0.0", + "https-proxy-agent": "^4.0.0", + "issue-parser": "^5.0.0", + "lodash": "^4.17.4", + "mime": "^2.4.3", + "p-filter": "^2.0.0", + "p-retry": "^4.0.0", + "url-join": "^4.0.0" + } + }, + "@semantic-release/npm": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-5.3.5.tgz", + "integrity": "sha512-AOREQ6rUT8OAiqXvWCp0kMNjcdnLLq1JdP0voZL4l5zf6Tgs/65YA7ctP+9shthW01Ps85Nu0pILW3p9GkaYuw==", + "dev": true, + "requires": { + "@semantic-release/error": "^2.2.0", + "aggregate-error": "^3.0.0", + "execa": "^3.2.0", + "fs-extra": "^8.0.0", + "lodash": "^4.17.15", + "nerf-dart": "^1.0.0", + "normalize-url": "^4.0.0", + "npm": "^6.10.3", + "rc": "^1.2.8", + "read-pkg": "^5.0.0", + "registry-auth-token": "^4.0.0", + "tempy": "^0.3.0" + } + }, + "@semantic-release/release-notes-generator": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-7.3.5.tgz", + "integrity": "sha512-LGjgPBGjjmjap/76O0Md3wc04Y7IlLnzZceLsAkcYRwGQdRPTTFUJKqDQTuieWTs7zfHzQoZqsqPfFxEN+g2+Q==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-changelog-writer": "^4.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.0.0", + "debug": "^4.0.0", + "get-stream": "^5.0.0", + "import-from": "^3.0.0", + "into-stream": "^5.0.0", + "lodash": "^4.17.4", + "read-pkg-up": "^7.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + } + } + }, + "@types/babel__core": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", + "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz", + "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/braces": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", + "integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==", + "dev": true + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/ip": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@types/ip/-/ip-0.0.31.tgz", + "integrity": "sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", + "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", + "dev": true, + "requires": { + "jest-diff": "^24.3.0" + } + }, + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.150", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz", + "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==", + "dev": true + }, + "@types/micromatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", + "integrity": "sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw==", + "dev": true, + "requires": { + "@types/braces": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.8", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz", + "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.30.0.tgz", + "integrity": "sha512-PGejii0qIZ9Q40RB2jIHyUpRWs1GJuHP1pkoCiaeicfwO9z7Fx03NQzupuyzAmv+q9/gFNHu7lo1ByMXe8PNyg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.30.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.30.0.tgz", + "integrity": "sha512-L3/tS9t+hAHksy8xuorhOzhdefN0ERPDWmR9CclsIGOUqGKy6tqc/P+SoXeJRye5gazkuPO0cK9MQRnolykzkA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.30.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.30.0.tgz", + "integrity": "sha512-9kDOxzp0K85UnpmPJqUzdWaCNorYYgk1yZmf4IKzpeTlSAclnFsrLjfwD9mQExctLoLoGAUXq1co+fbr+3HeFw==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.30.0", + "@typescript-eslint/typescript-estree": "2.30.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.30.0.tgz", + "integrity": "sha512-nI5WOechrA0qAhnr+DzqwmqHsx7Ulr/+0H7bWCcClDhhWkSyZR5BmTvnBEyONwJCTWHfc5PAQExX24VD26IAVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^6.3.0", + "tsutils": "^3.17.1" + } + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "dev": true + }, + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", + "dev": true + }, + "any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", + "dev": true + }, + "await-lock": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.0.1.tgz", + "integrity": "sha512-ntLi9fzlMT/vWjC1wwVI11/cSRJ3nTS35qVekNc9WnaoMOP2eWH0RvIqwLQkDjX4a4YynsKEv+Ere2VONp9wxg==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "dev": true + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "optional": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", + "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cachedir": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", + "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dev": true, + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commitizen": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.0.4.tgz", + "integrity": "sha512-gfEt1rDE9VqKif+LE3cAThpqiW/1K3c2Nx83jSU6ohZjQd2CAmz1rMIlgmbPrPagOkKZw7USzSVubS758ZTWdA==", + "dev": true, + "requires": { + "cachedir": "2.2.0", + "cz-conventional-changelog": "3.0.1", + "dedent": "0.7.0", + "detect-indent": "6.0.0", + "find-node-modules": "2.0.0", + "find-root": "1.1.0", + "fs-extra": "8.1.0", + "glob": "7.1.4", + "inquirer": "6.5.0", + "is-utf8": "^0.2.1", + "lodash": "4.17.15", + "minimist": "1.2.3", + "shelljs": "0.7.6", + "strip-bom": "4.0.0", + "strip-json-comments": "3.0.1" + }, + "dependencies": { + "cz-conventional-changelog": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.0.1.tgz", + "integrity": "sha512-7KASIwB8/ClEyCRvQrCPbN7WkQnUSjSSVNyPM+gDJ0jskLi8h8N2hrdpyeCk7fIqKMRzziqVSOBTB8yyLTMHGQ==", + "dev": true, + "requires": { + "@commitlint/load": ">6.1.1", + "chalk": "^2.4.1", + "conventional-commit-types": "^2.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "right-pad": "^1.0.1", + "word-wrap": "^1.0.3" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimist": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw==", + "dev": true + } + } + }, + "compare-func": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", + "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz", + "integrity": "sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-changelog-writer": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz", + "integrity": "sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "conventional-commits-filter": "^2.0.2", + "dateformat": "^3.0.0", + "handlebars": "^4.4.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^5.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^3.0.0" + } + }, + "conventional-commit-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.3.0.tgz", + "integrity": "sha512-6iB39PrcGYdz0n3z31kj6/Km6mK9hm9oMRhwcLnKxE7WNoeRKZbTAobliKrbYZ5jqyCvtcVEfjCiaEzhL3AVmQ==", + "dev": true + }, + "conventional-commits-filter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz", + "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz", + "integrity": "sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^5.0.0", + "split2": "^2.0.0", + "through2": "^3.0.0", + "trim-off-newlines": "^1.0.0" + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "coveralls": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", + "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" + } + }, + "cross-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cz-conventional-changelog": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.0.2.tgz", + "integrity": "sha512-MPxERbtQyVp0nnpCBiwzKGKmMBSswmCV3Jpef3Axqd5f3c/SOc6VFiSUlclOyZXBn3Xtf4snzt4O15hBTRb2gA==", + "dev": true, + "requires": { + "@commitlint/load": ">6.1.1", + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^2.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "right-pad": "^1.0.1", + "word-wrap": "^1.0.3" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-indent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", + "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "env-ci": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-4.5.2.tgz", + "integrity": "sha512-lS+edpNp2+QXEPkx6raEMIjKxKKWnJ4+VWzovYJ2NLYiJAYenSAXotFfVdgaFxdbVnvAbUI8epQDa1u12ERxfQ==", + "dev": true, + "requires": { + "execa": "^3.2.0", + "java-properties": "^1.0.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "inquirer": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-plugin-prettier": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", + "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "expression-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/expression-eval/-/expression-eval-2.1.0.tgz", + "integrity": "sha512-FUJO/Akvl/JOWkvlqZaqbkhsEWlCJWDeZG4tzX96UH68D9FeRgYgtb55C2qtqbORC0Q6x5419EDjWu4IT9kQfg==", + "requires": { + "jsep": "^0.3.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-node-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", + "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", + "dev": true, + "requires": { + "findup-sync": "^3.0.0", + "merge": "^1.2.1" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.3", + "bundled": true, + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "npm-packlist": { + "version": "1.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "g-status": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", + "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "matcher": "^1.0.0", + "simple-git": "^1.85.0" + } + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", + "dev": true, + "requires": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + }, + "dependencies": { + "split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", + "dev": true, + "requires": { + "through2": "~2.0.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "optional": true, + "requires": { + "ini": "^1.3.4" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hook-std": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", + "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-proxy-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz", + "integrity": "sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "husky": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-2.7.0.tgz", + "integrity": "sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg==", + "dev": true, + "requires": { + "cosmiconfig": "^5.2.0", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^7.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^4.1.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^5.1.1", + "run-node": "^1.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "into-stream": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz", + "integrity": "sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==", + "dev": true, + "requires": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "dev": true, + "requires": { + "symbol-observable": "^1.1.0" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "issue-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-5.0.0.tgz", + "integrity": "sha512-q/16W7EPHRL0FKVz9NU++TUsoygXGj6JOi88oulyAcQG+IEZ0T6teVdE+VLbe19OfL/tbV8Wi3Dfo0HedeHW0Q==", + "dev": true, + "requires": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + } + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, + "java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "dev": true + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + } + } + }, + "jsep": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-0.3.4.tgz", + "integrity": "sha512-ovGD9wE+wvudIIYxZGrRcZCxNyZ3Cl1N7Bzyp7/j4d/tA0BaUwcVM9bu0oZaSrefMiNwv6TwZ9X15gvZosteCQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "lint-staged": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", + "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", + "dev": true, + "requires": { + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^5.2.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "del": "^3.0.0", + "execa": "^1.0.0", + "g-status": "^2.0.2", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.2", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2", + "yup": "^0.27.0" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dev": true, + "requires": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, + "longest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", + "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "macos-release": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", + "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "dev": true + }, + "marked-terminal": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz", + "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==", + "dev": true, + "requires": { + "ansi-escapes": "^3.1.0", + "cardinal": "^2.1.1", + "chalk": "^2.4.1", + "cli-table": "^0.3.1", + "node-emoji": "^1.4.1", + "supports-hyperlinks": "^1.0.1" + } + }, + "matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.4" + } + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "mri": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz", + "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "npm": { + "version": "6.14.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.4.tgz", + "integrity": "sha512-B8UDDbWvdkW6RgXFn8/h2cHJP/u/FPa4HWeGzW23aNEBARN3QPrRaHqPIZW2NSN3fW649gtgUDNZpaRs0zTMPw==", + "dev": true, + "requires": { + "JSONStream": "^1.3.5", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "^2.0.0", + "archy": "~1.0.0", + "bin-links": "^1.1.7", + "bluebird": "^3.5.5", + "byte-size": "^5.0.1", + "cacache": "^12.0.3", + "call-limit": "^1.1.1", + "chownr": "^1.1.4", + "ci-info": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.1", + "cmd-shim": "^3.0.3", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.3.0", + "glob": "^7.1.6", + "graceful-fs": "^4.2.3", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.8.8", + "iferr": "^1.0.2", + "imurmurhash": "*", + "infer-owner": "^1.0.4", + "inflight": "~1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^3.0.0", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^4.0.7", + "libnpm": "^3.0.1", + "libnpmaccess": "^3.0.2", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "libnpx": "^10.2.2", + "lock-verify": "^2.1.0", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^5.1.1", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.4", + "move-concurrently": "^1.0.1", + "node-gyp": "^5.1.0", + "nopt": "~4.0.1", + "normalize-package-data": "^2.5.0", + "npm-audit-report": "^1.3.2", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "^3.0.2", + "npm-lifecycle": "^3.1.4", + "npm-package-arg": "^6.1.1", + "npm-packlist": "^1.4.8", + "npm-pick-manifest": "^3.0.2", + "npm-profile": "^4.0.4", + "npm-registry-fetch": "^4.0.3", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^9.5.12", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.8.2", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "^1.0.5", + "read-installed": "~4.0.3", + "read-package-json": "^2.1.1", + "read-package-tree": "^5.3.1", + "readable-stream": "^3.6.0", + "readdir-scoped-modules": "^1.1.0", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "^2.7.1", + "safe-buffer": "^5.1.2", + "semver": "^5.7.1", + "sha": "^3.0.0", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.1", + "stringify-package": "^1.0.1", + "tar": "^4.4.13", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "^1.1.1", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.3", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.7.0", + "write-file-atomic": "^2.4.3" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "bundled": true, + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "bundled": true, + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "asap": { + "version": "2.0.6", + "bundled": true, + "dev": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true, + "dev": true + }, + "aws4": { + "version": "1.8.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cmd-shim": "^3.0.0", + "gentle-fs": "^2.3.0", + "graceful-fs": "^4.1.15", + "npm-normalize-package-bin": "^1.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "bluebird": { + "version": "3.5.5", + "bundled": true, + "dev": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "byline": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "byte-size": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "cacache": { + "version": "12.0.3", + "bundled": true, + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "cidr-regex": { + "version": "2.0.10", + "bundled": true, + "dev": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "cmd-shim": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "colors": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "bundled": true, + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true, + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "bundled": true, + "dev": true + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true, + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "err-code": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "bundled": true, + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "bundled": true, + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "figgy-pudding": { + "version": "3.5.1", + "bundled": true, + "dev": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^2.6.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true, + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "gentle-fs": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.2", + "chownr": "^1.1.2", + "cmd-shim": "^3.0.3", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "infer-owner": "^1.0.4", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true, + "dev": true + } + } + }, + "get-caller-file": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.3", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "har-validator": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "bundled": true, + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true, + "dev": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ip": { + "version": "1.1.5", + "bundled": true, + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "ci-info": "^1.5.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "bundled": true, + "dev": true + } + } + }, + "is-cidr": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "cidr-regex": "^2.0.10" + } + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true, + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true, + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "lcid": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "libcipm": { + "version": "4.0.7", + "bundled": true, + "dev": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "ini": "^1.3.5", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^9.1.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpm": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "find-npm-prefix": "^1.0.2", + "libnpmaccess": "^3.0.2", + "libnpmconfig": "^1.2.1", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmpublish": "^1.1.2", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "lock-verify": "^2.0.2", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npmlog": "^4.1.2", + "pacote": "^9.5.3", + "read-package-json": "^2.0.13", + "stringify-package": "^1.0.0" + } + }, + "libnpmaccess": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmconfig": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true, + "dev": true + } + } + }, + "libnpmhook": { + "version": "5.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmorg": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmpublish": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "libnpmsearch": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmteam": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpx": { + "version": "10.2.2", + "bundled": true, + "dev": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^6.1.0", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true, + "dev": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true, + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true, + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true, + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true, + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true, + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true, + "dev": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true, + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "5.0.2", + "bundled": true, + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "meant": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "mem": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "bundled": true, + "dev": true + } + } + }, + "mime-db": { + "version": "1.35.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.4", + "bundled": true, + "dev": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true, + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "npm-audit-report": { + "version": "1.3.2", + "bundled": true, + "dev": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "npm-install-checks": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "3.1.4", + "bundled": true, + "dev": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true, + "dev": true + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "npm-package-arg": { + "version": "6.1.1", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.8", + "bundled": true, + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "4.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.2 || 2", + "figgy-pudding": "^3.4.1", + "npm-registry-fetch": "^4.0.0" + } + }, + "npm-registry-fetch": { + "version": "4.0.3", + "bundled": true, + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true, + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "object-keys": { + "version": "1.0.12", + "bundled": true, + "dev": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "9.5.12", + "bundled": true, + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-normalize-package-bin": "^1.0.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "pify": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true, + "dev": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true, + "dev": true + }, + "protoduck": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "psl": { + "version": "1.1.29", + "bundled": true, + "dev": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "qs": { + "version": "6.5.2", + "bundled": true, + "dev": true + }, + "query-string": { + "version": "6.8.2", + "bundled": true, + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true + } + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "bundled": true, + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "bundled": true, + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "retry": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "sha": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "socks": { + "version": "2.3.3", + "bundled": true, + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "dev": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true, + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "split-on-first": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "bundled": true, + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "bundled": true, + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true, + "dev": true + } + } + }, + "stringify-package": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "through": { + "version": "2.3.8", + "bundled": true, + "dev": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true, + "dev": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true + }, + "umask": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "util-promisify": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.3", + "bundled": true, + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "bundled": true, + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "11.1.1", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dev": true, + "requires": { + "which": "^1.2.10" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dev": true, + "requires": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + }, + "dependencies": { + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + } + } + }, + "p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + }, + "p-retry": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.2.0.tgz", + "integrity": "sha512-jPH38/MRh263KKcq0wBNOGFJbm+U6784RilTmHjB/HM9kH9V8WlCpVUcdOmip9cjXOh6MxZ5yk1z2SjDUJfWmA==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "pretty-quick": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-2.0.1.tgz", + "integrity": "sha512-y7bJt77XadjUr+P1uKqZxFWLddvj3SKY6EU4BuQtMxmmEFSMpbN132pUWdSG1g1mtUfO0noBvn7wBf0BVeomHg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "execa": "^2.1.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.4", + "multimatch": "^4.0.0" + }, + "dependencies": { + "execa": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", + "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompts": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.4" + } + }, + "property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + } + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "dev": true, + "requires": { + "esprima": "~4.0.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true, + "optional": true + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "registry-auth-token": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", + "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "optional": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "right-pad": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz", + "integrity": "sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "dev": true + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semantic-release": { + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.14.0.tgz", + "integrity": "sha512-Cn43W35AOLY0RMcDbtwhJODJmWg6YCs1+R5jRQsTmmkEGzkV4B2F/QXkjVZpl4UbH91r93GGH0xhoq9kh7I5PA==", + "dev": true, + "requires": { + "@semantic-release/commit-analyzer": "^6.1.0", + "@semantic-release/error": "^2.2.0", + "@semantic-release/github": "^5.1.0", + "@semantic-release/npm": "^5.0.5", + "@semantic-release/release-notes-generator": "^7.1.2", + "aggregate-error": "^3.0.0", + "cosmiconfig": "^6.0.0", + "debug": "^4.0.0", + "env-ci": "^4.0.0", + "execa": "^3.2.0", + "figures": "^3.0.0", + "find-versions": "^3.0.0", + "get-stream": "^5.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^2.0.0", + "hosted-git-info": "^3.0.0", + "lodash": "^4.17.15", + "marked": "^0.7.0", + "marked-terminal": "^3.2.0", + "p-locate": "^4.0.0", + "p-reduce": "^2.0.0", + "read-pkg-up": "^7.0.0", + "resolve-from": "^5.0.0", + "semver": "^6.0.0", + "signale": "^1.2.1", + "yargs": "^15.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "hosted-git-info": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", + "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shelljs": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.6.tgz", + "integrity": "sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dev": true, + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + } + }, + "simple-git": { + "version": "1.132.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", + "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", + "dev": true, + "requires": { + "debug": "^4.0.1" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "requires": { + "through2": "^2.0.2" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "staged-git-files": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", + "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "string-argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", + "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "dev": true, + "requires": { + "has-flag": "^2.0.0", + "supports-color": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + } + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "synchronous-promise": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.10.tgz", + "integrity": "sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A==", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "dev": true, + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, + "ts-jest": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", + "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "dev": true + }, + "tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typescript": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", + "dev": true + }, + "uglify-js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz", + "integrity": "sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universal-user-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz", + "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "windows-release": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz", + "integrity": "sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==", + "dev": true, + "requires": { + "execa": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yup": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", + "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "fn-name": "~2.0.1", + "lodash": "^4.17.11", + "property-expr": "^1.5.0", + "synchronous-promise": "^2.0.6", + "toposort": "^2.0.2" + } + } + } +} diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 525d8d8d..0279f12d 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -16,7 +16,7 @@ import { compile, compileAsync } from 'expression-eval'; import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; -import { Adapter, Filter, FilteredAdapter, Watcher } from './persist'; +import { Adapter, Filter, FilteredAdapter, Watcher, BatchAdapter } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval } from './util'; import { getLogger, logPrint } from './log'; @@ -33,7 +33,7 @@ export class CoreEnforcer { protected eft: Effector = new DefaultEffector(); private matcherMap: Map = new Map(); - protected adapter: FilteredAdapter | Adapter; + protected adapter: FilteredAdapter | Adapter | BatchAdapter; protected watcher: Watcher | null = null; protected rm: RoleManager = new DefaultRoleManager(10); From 3804c3d76802614104016a011c07c11c54a94632 Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Sun, 24 May 2020 23:04:00 +0530 Subject: [PATCH 364/497] fix: Add imports and batchFileAdapter implementation. --- src/persist/batchFileAdapter.ts | 28 ++++++++++++++++++++++++++++ src/persist/index.ts | 2 ++ 2 files changed, 30 insertions(+) create mode 100644 src/persist/batchFileAdapter.ts diff --git a/src/persist/batchFileAdapter.ts b/src/persist/batchFileAdapter.ts new file mode 100644 index 00000000..8a8d0fda --- /dev/null +++ b/src/persist/batchFileAdapter.ts @@ -0,0 +1,28 @@ +import { FileAdapter } from './fileAdapter'; +import { BatchAdapter } from './batchAdapter'; + +/** + * FileAdapter is the file adapter for Casbin. + * It can load policy from file or save policy to file. + */ +export class BatchFileAdapter extends FileAdapter implements BatchAdapter { + /** + * FileAdapter is the constructor for FileAdapter. + * @param {string} filePath filePath the path of the policy file. + */ + constructor(filePath: string) { + super(filePath); + } + + // addPolicies adds policy rules to the storage. + // This is part of the Auto-Save feature. + public async addPolicies(sec: string, ptype: string, rules: string[][]): Promise { + throw new Error('not implemented'); + } + + // removePolicies removes policy rules from the storage. + // This is part of the Auto-Save feature. + public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { + throw new Error('not implemented'); + } +} diff --git a/src/persist/index.ts b/src/persist/index.ts index d0100fde..03b19060 100644 --- a/src/persist/index.ts +++ b/src/persist/index.ts @@ -5,3 +5,5 @@ export * from './helper'; export * from './watcher'; export * from './filteredAdapter'; export * from './defaultFilteredAdapter'; +export * from './batchAdapter'; +export * from './batchFileAdapter'; From e6ad7af69344a5bd95b6490f162dba83d10c98fb Mon Sep 17 00:00:00 2001 From: DivyPatel9881 Date: Sun, 24 May 2020 23:05:18 +0530 Subject: [PATCH 365/497] fix: Add tests for batch operations. --- test/managementAPI.test.ts | 119 ++++++++++++++++++++++++++++++++++++- 1 file changed, 118 insertions(+), 1 deletion(-) diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 739fa569..6599cc24 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -13,6 +13,7 @@ // limitations under the License. import { newEnforcer, Enforcer, Util } from '../src'; +import { BatchFileAdapter } from '../src/persist'; let e = {} as Enforcer; @@ -145,6 +146,22 @@ test('addPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(true); }); +test('addPolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'] + ]; + const added = await e.addPolicies(rules); + expect(added).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(true); + } +}); + test('addNamedPolicy', async () => { const p = ['eve', 'data3', 'read']; const added = await e.addNamedPolicy('p', ...p); @@ -152,6 +169,22 @@ test('addNamedPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(true); }); +test('addNamedPolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'] + ]; + const added = await e.addNamedPolicies('p', rules); + expect(added).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(true); + } +}); + test('removePolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removePolicy(...p); @@ -159,6 +192,24 @@ test('removePolicy', async () => { expect(await e.hasPolicy(...p)).toBe(false); }); +test('removePolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'] + ]; + const added = await e.addPolicies(rules); + expect(added).toBe(true); + const removed = await e.removePolicies(rules); + expect(removed).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(false); + } +}); + test('removeFilteredPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeFilteredPolicy(0, ...p); @@ -173,6 +224,24 @@ test('removeNamedPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(false); }); +test('removeNamedPolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'] + ]; + const added = await e.addPolicies(rules); + expect(added).toBe(true); + const removed = await e.removeNamedPolicies('p', rules); + expect(removed).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(false); + } +}); + test('removeFilteredNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removeFilteredNamedPolicy('p', 0, ...p); @@ -195,16 +264,51 @@ test('addGroupingPolicy', async () => { expect(added).toBe(true); }); -test('addNamedGroupingPolicy ', async () => { +test('addGroupingPolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'] + ]; + const added = await e.addGroupingPolicies(groupingRules); + expect(added).toBe(true); +}); + +test('addNamedGroupingPolicy', async () => { const added = await e.addNamedGroupingPolicy('g', 'group1', 'data2_admin'); expect(added).toBe(true); }); +test('addNamedGroupingPolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'] + ]; + const added = await e.addNamedGroupingPolicies('g', groupingRules); + expect(added).toBe(true); +}); + test('removeGroupingPolicy', async () => { const removed = await e.removeGroupingPolicy('alice', 'data2_admin'); expect(removed).toBe(true); }); +test('removeGroupingPolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'] + ]; + const added = await e.addGroupingPolicies(groupingRules); + expect(added).toBe(true); + const removed = await e.removeGroupingPolicies(groupingRules); + expect(removed).toBe(true); +}); + test('removeFilteredGroupingPolicy', async () => { const removed = await e.removeFilteredGroupingPolicy(0, 'alice'); expect(removed).toBe(true); @@ -214,3 +318,16 @@ test('removeFilteredNamedGroupingPolicy', async () => { const removed = await e.removeFilteredNamedGroupingPolicy('g', 0, 'alice'); expect(removed).toBe(true); }); + +test('removeNamedGroupingPolicies', async () => { + const a = new BatchFileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'] + ]; + const added = await e.addGroupingPolicies(groupingRules); + expect(added).toBe(true); + const removed = await e.removeNamedGroupingPolicies('g', groupingRules); + expect(removed).toBe(true); +}); From 5d17b89d33e7e15d56a5358501099ba56bb584fb Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 25 May 2020 15:17:03 +0000 Subject: [PATCH 366/497] chore(release): 5.0.2 [skip ci] ## [5.0.2](https://github.com/casbin/node-casbin/compare/v5.0.1...v5.0.2) (2020-05-25) ### Bug Fixes * Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/node-casbin/commit/3804c3d76802614104016a011c07c11c54a94632)) * Add tests for batch operations. ([e6ad7af](https://github.com/casbin/node-casbin/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) * Merge conflicts. ([7179b17](https://github.com/casbin/node-casbin/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c1fd16b..35bef475 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.1", + "version": "5.0.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 27 May 2020 21:08:16 +0800 Subject: [PATCH 367/497] fix: check adapter type --- src/coreEnforcer.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 0279f12d..70c4bcab 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -16,7 +16,7 @@ import { compile, compileAsync } from 'expression-eval'; import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; -import { Adapter, Filter, FilteredAdapter, Watcher, BatchAdapter } from './persist'; +import { Adapter, FilteredAdapter, Watcher, BatchAdapter } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval } from './util'; import { getLogger, logPrint } from './log'; @@ -160,11 +160,11 @@ export class CoreEnforcer { * * @param filter the filter used to specify which type of policy should be loaded. */ - public async loadFilteredPolicy(filter: Filter): Promise { + public async loadFilteredPolicy(filter: any): Promise { this.model.clearPolicy(); - if ((this.adapter as FilteredAdapter).isFiltered()) { - await (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); + if ('isFiltered' in this.adapter) { + await this.adapter.loadFilteredPolicy(this.model, filter); } else { throw new Error('filtered policies are not supported by this adapter'); } @@ -182,8 +182,8 @@ export class CoreEnforcer { * @return if the loaded policy has been filtered. */ public isFiltered(): boolean { - if ((this.adapter as FilteredAdapter).isFiltered) { - return (this.adapter as FilteredAdapter).isFiltered(); + if ('isFiltered' in this.adapter) { + return this.adapter.isFiltered(); } return false; } From b1d3c4d7d6968a994a12e604ed8b7f2079467b73 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 27 May 2020 16:03:17 +0000 Subject: [PATCH 368/497] chore(release): 5.0.3 [skip ci] ## [5.0.3](https://github.com/casbin/node-casbin/compare/v5.0.2...v5.0.3) (2020-05-27) ### Bug Fixes * check adapter type ([a74314d](https://github.com/casbin/node-casbin/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35bef475..115146d9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.2", + "version": "5.0.3", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 293a852803d5e83562a36bc35cdf48def0f0088b Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 8 Jun 2020 01:34:58 +0800 Subject: [PATCH 369/497] fix: remove lodash --- package.json | 4 ++-- src/model/assertion.ts | 5 ++--- src/model/model.ts | 7 +++--- src/util/builtinOperators.ts | 42 ++++++++++++++++++++---------------- src/util/util.ts | 41 ++++++++++++++++++++++++++--------- 5 files changed, 62 insertions(+), 37 deletions(-) diff --git a/package.json b/package.json index 115146d9..ac409e34 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "build": "rimraf lib && tsc", "test": "jest", "lint": "eslint . --ext .js,.ts", + "fmt": "eslint . --ext .js,.ts --fix", "semantic-release": "semantic-release", "commit": "git-cz" }, @@ -43,7 +44,6 @@ "await-lock": "^2.0.1", "expression-eval": "^2.0.0", "ip": "^1.1.5", - "lodash": "^4.17.15", "micromatch": "^4.0.2" }, "files": [ @@ -64,7 +64,7 @@ "husky": { "hooks": { "prepare-commit-msg": "exec < /dev/tty && git cz --hook || true", - "pre-commit": "yarn lint && pretty-quick --staged" + "pre-commit": "yarn fmt && pretty-quick --staged" } }, "config": { diff --git a/src/model/assertion.ts b/src/model/assertion.ts index 38bd7faa..093455fd 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -13,7 +13,6 @@ // limitations under the License. import * as rbac from '../rbac'; -import * as _ from 'lodash'; import { logPrint } from '../log'; import { PolicyOp } from './model'; @@ -39,7 +38,7 @@ export class Assertion { public async buildIncrementalRoleLinks(rm: rbac.RoleManager, op: PolicyOp, rules: string[][]): Promise { this.rm = rm; - const count = _.words(this.value, /_/g).length; + const count = (this.value.match(/_/g) || []).length; if (count < 2) { throw new Error('the number of "_" in role definition should be at least 2'); } @@ -65,7 +64,7 @@ export class Assertion { public async buildRoleLinks(rm: rbac.RoleManager): Promise { this.rm = rm; - const count = _.words(this.value, /_/g).length; + const count = (this.value.match(/_/g) || []).length; if (count < 2) { throw new Error('the number of "_" in role definition should be at least 2'); } diff --git a/src/model/model.ts b/src/model/model.ts index 419249fb..1f003bf8 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as _ from 'lodash'; import * as rbac from '../rbac'; import * as util from '../util'; import { Config, ConfigInterface } from '../config'; @@ -57,7 +56,7 @@ export class Model { return ''; } - return _.toString(i); + return i.toString(); } private loadSection(cfg: ConfigInterface, sec: string): void { @@ -256,7 +255,7 @@ export class Model { if (!ast) { return false; } - ast.policy = _.filter(ast.policy, r => !util.arrayEquals(rule, r)); + ast.policy = ast.policy.filter(r => !util.arrayEquals(rule, r)); return true; } @@ -278,7 +277,7 @@ export class Model { } for (const rule of rules) { - ast.policy = _.filter(ast.policy, (r: string[]) => { + ast.policy = ast.policy.filter((r: string[]) => { const equals = util.arrayEquals(rule, r); if (equals) { effects.push(r); diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index ca5ea497..e03df6bd 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -14,7 +14,6 @@ import * as rbac from '../rbac'; import * as ip from 'ip'; -import * as _ from 'lodash'; import { isMatch } from 'micromatch'; // regexMatch determines whether key1 matches the pattern of key2 in regular expression. @@ -40,8 +39,9 @@ function keyMatch(key1: string, key2: string): boolean { // keyMatchFunc is the wrapper for keyMatch. function keyMatchFunc(...args: any[]): boolean { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); return keyMatch(name1, name2); } @@ -54,7 +54,7 @@ function keyMatch2(key1: string, key2: string): boolean { const regexp = new RegExp(/(.*):[^/]+(.*)/g); for (;;) { - if (!_.includes(key2, '/:')) { + if (!key2.includes('/:')) { break; } key2 = key2.replace(regexp, '$1[^/]+$2'); @@ -65,8 +65,9 @@ function keyMatch2(key1: string, key2: string): boolean { // keyMatch2Func is the wrapper for keyMatch2. function keyMatch2Func(...args: any[]): boolean { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); return keyMatch2(name1, name2); } @@ -78,7 +79,7 @@ function keyMatch3(key1: string, key2: string): boolean { const regexp = new RegExp(/(.*){[^/]+}(.*)/g); for (;;) { - if (!_.includes(key2, '/{')) { + if (!key2.includes('/{')) { break; } key2 = key2.replace(regexp, '$1[^/]+$2'); @@ -89,8 +90,9 @@ function keyMatch3(key1: string, key2: string): boolean { // keyMatch3Func is the wrapper for keyMatch3. function keyMatch3Func(...args: any[]): boolean { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); return keyMatch3(name1, name2); } @@ -166,16 +168,18 @@ function keyMatch4(key1: string, key2: string): boolean { // keyMatch4Func is the wrapper for keyMatch4. function keyMatch4Func(...args: any[]): boolean { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); return keyMatch4(name1, name2); } // regexMatchFunc is the wrapper for regexMatch. function regexMatchFunc(...args: any[]): boolean { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); return regexMatch(name1, name2); } @@ -203,8 +207,9 @@ function ipMatch(ip1: string, ip2: string): boolean { // ipMatchFunc is the wrapper for ipMatch. function ipMatchFunc(...args: any[]): boolean { - const ip1: string = _.toString(args[0]); - const ip2: string = _.toString(args[1]); + const [arg0, arg1] = args; + const ip1: string = (arg0 || '').toString(); + const ip2: string = (arg1 || '').toString(); return ipMatch(ip1, ip2); } @@ -229,15 +234,16 @@ function globMatch(string: string, pattern: string): boolean { // generateGFunction is the factory method of the g(_, _) function. function generateGFunction(rm: rbac.RoleManager): any { return async function func(...args: any[]): Promise { - const name1: string = _.toString(args[0]); - const name2: string = _.toString(args[1]); + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); if (!rm) { return name1 === name2; } else if (args.length === 2) { return await rm.hasLink(name1, name2); } else { - const domain: string = _.toString(args[2]); + const domain: string = args[2].toString(); return await rm.hasLink(name1, name2, domain); } }; diff --git a/src/util/util.ts b/src/util/util.ts index 7cd34298..d9c892c4 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as _ from 'lodash'; import * as fs from 'fs'; // escapeAssertion escapes the dots in the assertion, @@ -26,37 +25,59 @@ function escapeAssertion(s: string): string { // removeComments removes the comments starting with # in the text. function removeComments(s: string): string { const pos = s.indexOf('#'); - return pos > -1 ? _.trim(s.slice(0, pos)) : s; + return pos > -1 ? s.slice(0, pos).trim() : s; } // arrayEquals determines whether two string arrays are identical. -function arrayEquals(a: string[], b: string[]): boolean { - return _.isEqual(a, b); +function arrayEquals(a: string[] = [], b: string[] = []): boolean { + const aLen = a.length; + const bLen = b.length; + if (aLen !== bLen) { + return false; + } + + for (let i = 0; i < aLen; i++) { + if (a[i] != b[i]) { + return false; + } + } + return true; } // array2DEquals determines whether two 2-dimensional string arrays are identical. -function array2DEquals(a: string[][], b: string[][]): boolean { - return _.isEqual(a, b); +function array2DEquals(a: string[][] = [], b: string[][] = []): boolean { + const aLen = a.length; + const bLen = a.length; + if (aLen != bLen) { + return false; + } + + for (let i = 0; i < aLen; i++) { + if (!arrayEquals(a[i], b[i])) { + return false; + } + } + return true; } // arrayRemoveDuplicates removes any duplicated elements in a string array. function arrayRemoveDuplicates(s: string[]): string[] { - return _.uniq(s); + return [...new Set(s)]; } // arrayToString gets a printable string for a string array. function arrayToString(a: string[]): string { - return _.join(a, ', '); + return a.join(', '); } // paramsToString gets a printable string for variable number of parameters. function paramsToString(...v: string[]): string { - return _.join(v, ', '); + return v.join(', '); } // setEquals determines whether two string sets are identical. function setEquals(a: string[], b: string[]): boolean { - return _.isEqual(_.sortedUniq(a), _.sortedUniq(b)); + return arrayEquals(a.sort(), b.sort()); } // readFile return a promise for readFile. From 271d6d68be0f9316473647d46f52becaa9817038 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 8 Jun 2020 00:09:03 +0000 Subject: [PATCH 370/497] chore(release): 5.0.4 [skip ci] ## [5.0.4](https://github.com/casbin/node-casbin/compare/v5.0.3...v5.0.4) (2020-06-08) ### Bug Fixes * remove lodash ([293a852](https://github.com/casbin/node-casbin/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ac409e34..d4963f5a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.3", + "version": "5.0.4", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From f76fbf5f4f00d6552d1eb0bc562df52b20dee10a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9D=89?= Date: Sun, 28 Jun 2020 15:02:31 +0800 Subject: [PATCH 371/497] chore: add changelog close #99 --- .releaserc.json | 8 +- CHANGELOG.md | 175 ++++++++++++++++++++++++++++ package-lock.json | 277 +++++++++++++++++++++++++-------------------- package.json | 2 +- yarn.lock | 283 +++++++++++++++++++--------------------------- 5 files changed, 456 insertions(+), 289 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.releaserc.json b/.releaserc.json index fcd8d070..4665ddf7 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -4,10 +4,16 @@ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/npm", + [ + "@semantic-release/changelog", + { + "changelogFile": "CHANGELOG.md" + } + ], [ "@semantic-release/git", { - "assets": ["package.json"], + "assets": ["package.json", "CHANGELOG.md"], "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" } ], diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..45b65e21 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,175 @@ +## [5.0.4](https://github.com/casbin/node-casbin/compare/v5.0.3...v5.0.4) (2020-06-08) + +### Bug Fixes + +- remove lodash ([293a852](https://github.com/casbin/node-casbin/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) + +## [5.0.3](https://github.com/casbin/node-casbin/compare/v5.0.2...v5.0.3) (2020-05-27) + +### Bug Fixes + +- check adapter type ([a74314d](https://github.com/casbin/node-casbin/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) + +## [5.0.2](https://github.com/casbin/node-casbin/compare/v5.0.1...v5.0.2) (2020-05-25) + +### Bug Fixes + +- Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/node-casbin/commit/3804c3d76802614104016a011c07c11c54a94632)) +- Add tests for batch operations. ([e6ad7af](https://github.com/casbin/node-casbin/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) +- Merge conflicts. ([7179b17](https://github.com/casbin/node-casbin/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) + +## [5.0.1](https://github.com/casbin/node-casbin/compare/v5.0.0...v5.0.1) (2020-05-22) + +### Bug Fixes + +- support comments after expression ([c97cb26](https://github.com/casbin/node-casbin/commit/c97cb26441d79316960a0464e8d56918859d969c)) + +# [5.0.0](https://github.com/casbin/node-casbin/compare/v4.7.2...v5.0.0) (2020-05-18) + +### Features + +- add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/node-casbin/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) +- improve effector for improve performance ([57de7b2](https://github.com/casbin/node-casbin/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) + +### BREAKING CHANGES + +- **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] +- - provides a new interface for Effector + +## [4.7.2](https://github.com/casbin/node-casbin/compare/v4.7.1...v4.7.2) (2020-05-09) + +### Bug Fixes + +- stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/node-casbin/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) + +## [4.7.1](https://github.com/casbin/node-casbin/compare/v4.7.0...v4.7.1) (2020-05-08) + +### Bug Fixes + +- Add examples. ([5cf950a](https://github.com/casbin/node-casbin/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) +- Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/node-casbin/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) +- Added util functions and util tests. ([72918bc](https://github.com/casbin/node-casbin/commit/72918bc677e898251dd4375516c31254e79eb6b8)) +- compatible types ([58242a5](https://github.com/casbin/node-casbin/commit/58242a56f9f72b1a06e4901867f502b73674d640)) +- tests. ([4da5291](https://github.com/casbin/node-casbin/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) + +# [4.7.0](https://github.com/casbin/node-casbin/compare/v4.6.0...v4.7.0) (2020-05-03) + +### Features + +- add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/node-casbin/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) + +# [4.6.0](https://github.com/casbin/node-casbin/compare/v4.5.0...v4.6.0) (2020-05-02) + +# [4.5.0](https://github.com/casbin/node-casbin/compare/v4.4.0...v4.5.0) (2020-04-30) + +### Features + +- avoid miss initialize() ([1394e8d](https://github.com/casbin/node-casbin/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) + +# [4.4.0](https://github.com/casbin/node-casbin/compare/v4.3.1...v4.4.0) (2020-04-25) + +### Features + +- add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/node-casbin/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) + +## [4.3.1](https://github.com/casbin/node-casbin/compare/v4.3.0...v4.3.1) (2020-04-21) + +### Bug Fixes + +- improve update into adapter before model ([0e9ccc6](https://github.com/casbin/node-casbin/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) + +# [4.3.0](https://github.com/casbin/node-casbin/compare/v4.2.1...v4.3.0) (2020-04-20) + +### Features + +- controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/node-casbin/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) + +## [4.2.1](https://github.com/casbin/node-casbin/compare/v4.2.0...v4.2.1) (2020-04-05) + +### Bug Fixes + +- remove use spread operator with await in array ([6e4f876](https://github.com/casbin/node-casbin/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) + +# [4.2.0](https://github.com/casbin/node-casbin/compare/v4.1.1...v4.2.0) (2020-04-05) + +### Features + +- add glob pattern to built-in function ([8415fc2](https://github.com/casbin/node-casbin/commit/8415fc2648796d033c85771e27219bd32541982e)) + +## [4.1.1](https://github.com/casbin/node-casbin/compare/v4.1.0...v4.1.1) (2020-02-20) + +### Bug Fixes + +- **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/node-casbin/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/node-casbin/issues/118) + +# [4.1.0](https://github.com/casbin/node-casbin/compare/v4.0.0...v4.1.0) (2020-02-13) + +### Features + +- synchronized enforcer ([ecec514](https://github.com/casbin/node-casbin/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) + +# [4.0.0](https://github.com/casbin/node-casbin/compare/v3.1.0...v4.0.0) (2020-02-11) + +### improvement + +- convert all management_api to async function ([e9f4d38](https://github.com/casbin/node-casbin/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) + +### BREAKING CHANGES + +- see # + +# [3.1.0](https://github.com/casbin/node-casbin/compare/v3.0.9...v3.1.0) (2020-01-22) + +### Features + +- implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/node-casbin/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) + +## [3.0.9](https://github.com/casbin/node-casbin/compare/v3.0.8...v3.0.9) (2020-01-14) + +### Bug Fixes + +- getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/node-casbin/commit/584624c99eabca68fc790d66fc4737511d92b074)) + +## [3.0.8](https://github.com/casbin/node-casbin/compare/v3.0.7...v3.0.8) (2019-12-12) + +## [3.0.7](https://github.com/casbin/node-casbin/compare/v3.0.6...v3.0.7) (2019-11-18) + +## [3.0.6](https://github.com/casbin/node-casbin/compare/v3.0.5...v3.0.6) (2019-11-07) + +## [3.0.5](https://github.com/casbin/node-casbin/compare/v3.0.4...v3.0.5) (2019-10-29) + +## [3.0.3](https://github.com/casbin/node-casbin/compare/v3.0.2...v3.0.3) (2019-07-06) + +## [3.0.2](https://github.com/casbin/node-casbin/compare/v3.0.1...v3.0.2) (2019-07-06) + +## [3.0.1](https://github.com/casbin/node-casbin/compare/v3.0.0...v3.0.1) (2019-06-14) + +# [3.0.0](https://github.com/casbin/node-casbin/compare/v3.0.0-beta.1...v3.0.0) (2019-06-05) + +# [3.0.0-beta.1](https://github.com/casbin/node-casbin/compare/v2.0.3...v3.0.0-beta.1) (2019-04-29) + +## [2.0.3](https://github.com/casbin/node-casbin/compare/v2.0.1...v2.0.3) (2019-04-22) + +## [2.0.1](https://github.com/casbin/node-casbin/compare/v2.0.0...v2.0.1) (2019-02-08) + +# [2.0.0](https://github.com/casbin/node-casbin/compare/v1.1.9...v2.0.0) (2019-01-05) + +## [1.1.9](https://github.com/casbin/node-casbin/compare/v1.1.8...v1.1.9) (2018-12-20) + +## [1.1.8](https://github.com/casbin/node-casbin/compare/v1.1.7...v1.1.8) (2018-12-18) + +## [1.1.7](https://github.com/casbin/node-casbin/compare/v1.1.6...v1.1.7) (2018-12-14) + +## [1.1.6](https://github.com/casbin/node-casbin/compare/v1.1.5...v1.1.6) (2018-12-07) + +## [1.1.5](https://github.com/casbin/node-casbin/compare/v1.1.4...v1.1.5) (2018-11-02) + +## [1.1.4](https://github.com/casbin/node-casbin/compare/v1.1.2...v1.1.4) (2018-11-01) + +## [1.1.2](https://github.com/casbin/node-casbin/compare/v1.1.1...v1.1.2) (2018-08-27) + +## [1.1.1](https://github.com/casbin/node-casbin/compare/v1.1.0...v1.1.1) (2018-08-20) + +# [1.1.0](https://github.com/casbin/node-casbin/compare/v1.0.9...v1.1.0) (2018-08-17) + +## [1.0.5](https://github.com/casbin/node-casbin/compare/v1.0.0...v1.0.5) (2018-08-09) diff --git a/package-lock.json b/package-lock.json index 255e6eb5..961ace17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "4.4.0", + "version": "5.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -274,41 +274,133 @@ } }, "@commitlint/execute-rule": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-8.3.4.tgz", - "integrity": "sha512-f4HigYjeIBn9f7OuNv5zh2y5vWaAhNFrfeul8CRJDy82l3Y+09lxOTGxfF3uMXKrZq4LmuK6qvvRCZ8mUrVvzQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-9.0.1.tgz", + "integrity": "sha512-fxnLadXs59qOBE9dInfQjQ4DmbGToQ0NjfqqmN6N8qS+KsCecO6N0mMUrC95et9xTeimFRr+0l9UMfmRVHNS/w==", "dev": true, "optional": true }, "@commitlint/load": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-8.3.5.tgz", - "integrity": "sha512-poF7R1CtQvIXRmVIe63FjSQmN9KDqjRtU5A6hxqXBga87yB2VUJzic85TV6PcQc+wStk52cjrMI+g0zFx+Zxrw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-9.0.1.tgz", + "integrity": "sha512-6ix/pUjVAggmDLTcnpyk0bgY3H9UBBTsEeFvTkHV+WQ6LNIxsQk8SwEOEZzWHUqt0pxqMQeiUgYeSZsSw2+uiw==", "dev": true, "optional": true, "requires": { - "@commitlint/execute-rule": "^8.3.4", - "@commitlint/resolve-extends": "^8.3.5", - "babel-runtime": "^6.23.0", - "chalk": "2.4.2", - "cosmiconfig": "^5.2.0", - "lodash": "4.17.15", + "@commitlint/execute-rule": "^9.0.1", + "@commitlint/resolve-extends": "^9.0.1", + "@commitlint/types": "^9.0.1", + "chalk": "3.0.0", + "cosmiconfig": "^6.0.0", + "lodash": "^4.17.15", "resolve-from": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "optional": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "optional": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "optional": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@commitlint/resolve-extends": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-8.3.5.tgz", - "integrity": "sha512-nHhFAK29qiXNe6oH6uG5wqBnCR+BQnxlBW/q5fjtxIaQALgfoNLHwLS9exzbIRFqwJckpR6yMCfgMbmbAOtklQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-9.0.1.tgz", + "integrity": "sha512-o6Lya2ILg1tEfWatS5x8w4ImvDzwb1whxsr2c/cxVCFqLF4hxHHHniZ0NJ+HFhYa1kBsYeKlD1qn9fHX5Y1+PQ==", "dev": true, "optional": true, "requires": { "import-fresh": "^3.0.0", - "lodash": "4.17.15", + "lodash": "^4.17.15", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" } }, + "@commitlint/types": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.0.1.tgz", + "integrity": "sha512-wo2rHprtDzTHf4tiSxavktJ52ntiwmg7eHNGFLH38G1of8OfGVwOc1sVbpM4jN/HK/rCMhYOi6xzoPqsv0537A==", + "dev": true, + "optional": true + }, "@jest/console": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", @@ -1770,17 +1862,6 @@ "babel-plugin-jest-hoist": "^24.9.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "optional": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2273,13 +2354,13 @@ "dev": true }, "commitizen": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.0.4.tgz", - "integrity": "sha512-gfEt1rDE9VqKif+LE3cAThpqiW/1K3c2Nx83jSU6ohZjQd2CAmz1rMIlgmbPrPagOkKZw7USzSVubS758ZTWdA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.1.2.tgz", + "integrity": "sha512-LBxTQKHbVgroMz9ohpm86N+GfJobonGyvDc3zBGdZazbwCLz2tqLa48Rf2TnAdKx7/06W1i1R3SXUt5QW97qVQ==", "dev": true, "requires": { "cachedir": "2.2.0", - "cz-conventional-changelog": "3.0.1", + "cz-conventional-changelog": "3.2.0", "dedent": "0.7.0", "detect-indent": "6.0.0", "find-node-modules": "2.0.0", @@ -2289,27 +2370,11 @@ "inquirer": "6.5.0", "is-utf8": "^0.2.1", "lodash": "4.17.15", - "minimist": "1.2.3", - "shelljs": "0.7.6", + "minimist": "1.2.5", "strip-bom": "4.0.0", "strip-json-comments": "3.0.1" }, "dependencies": { - "cz-conventional-changelog": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.0.1.tgz", - "integrity": "sha512-7KASIwB8/ClEyCRvQrCPbN7WkQnUSjSSVNyPM+gDJ0jskLi8h8N2hrdpyeCk7fIqKMRzziqVSOBTB8yyLTMHGQ==", - "dev": true, - "requires": { - "@commitlint/load": ">6.1.1", - "chalk": "^2.4.1", - "conventional-commit-types": "^2.0.0", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "right-pad": "^1.0.1", - "word-wrap": "^1.0.3" - } - }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -2323,12 +2388,6 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } - }, - "minimist": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.3.tgz", - "integrity": "sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw==", - "dev": true } } }, @@ -2383,9 +2442,9 @@ } }, "conventional-commit-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.3.0.tgz", - "integrity": "sha512-6iB39PrcGYdz0n3z31kj6/Km6mK9hm9oMRhwcLnKxE7WNoeRKZbTAobliKrbYZ5jqyCvtcVEfjCiaEzhL3AVmQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", + "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", "dev": true }, "conventional-commits-filter": { @@ -2436,13 +2495,6 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true, - "optional": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2534,18 +2586,17 @@ } }, "cz-conventional-changelog": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.0.2.tgz", - "integrity": "sha512-MPxERbtQyVp0nnpCBiwzKGKmMBSswmCV3Jpef3Axqd5f3c/SOc6VFiSUlclOyZXBn3Xtf4snzt4O15hBTRb2gA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz", + "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==", "dev": true, "requires": { "@commitlint/load": ">6.1.1", "chalk": "^2.4.1", "commitizen": "^4.0.3", - "conventional-commit-types": "^2.0.0", + "conventional-commit-types": "^3.0.0", "lodash.map": "^4.5.1", "longest": "^2.0.1", - "right-pad": "^1.0.1", "word-wrap": "^1.0.3" } }, @@ -3898,7 +3949,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -3919,12 +3971,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3939,17 +3993,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4066,7 +4123,8 @@ "inherits": { "version": "2.0.4", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4078,6 +4136,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4092,6 +4151,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4099,12 +4159,14 @@ "minimist": { "version": "1.2.5", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.9.0", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -4123,6 +4185,7 @@ "version": "0.5.3", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "^1.2.5" } @@ -4184,7 +4247,8 @@ "npm-normalize-package-bin": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "npm-packlist": { "version": "1.4.8", @@ -4212,7 +4276,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4224,6 +4289,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4301,7 +4367,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -4337,6 +4404,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4356,6 +4424,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4399,12 +4468,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -5057,12 +5128,6 @@ "through": "^2.3.6" } }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, "into-stream": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz", @@ -6917,7 +6982,8 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true }, "lodash.capitalize": { "version": "4.2.1", @@ -11961,15 +12027,6 @@ "util.promisify": "^1.0.0" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "redent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", @@ -11997,13 +12054,6 @@ "esprima": "~4.0.0" } }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true, - "optional": true - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -12210,12 +12260,6 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "right-pad": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz", - "integrity": "sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=", - "dev": true - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -12795,17 +12839,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shelljs": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.6.tgz", - "integrity": "sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", diff --git a/package.json b/package.json index d4963f5a..9e332865 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@typescript-eslint/eslint-plugin": "^2.6.1", "@typescript-eslint/parser": "^2.6.1", "coveralls": "^3.0.2", - "cz-conventional-changelog": "3.0.2", + "cz-conventional-changelog": "^3.2.0", "eslint": "^6.6.0", "eslint-config-prettier": "^6.5.0", "eslint-plugin-prettier": "^3.1.1", diff --git a/yarn.lock b/yarn.lock index 5a43a519..e499c789 100644 --- a/yarn.lock +++ b/yarn.lock @@ -153,35 +153,39 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@commitlint/execute-rule@^8.2.0": - version "8.2.0" - resolved "https://registry.npm.taobao.org/@commitlint/execute-rule/download/@commitlint/execute-rule-8.2.0.tgz#aefb3744e22613660adefb7ebcccaa60bd24e78d" - integrity sha1-rvs3ROImE2YK3vt+vMyqYL0k540= +"@commitlint/execute-rule@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-9.0.1.tgz#59993cf87103d75b56c6ae790cd4240c1863b3c2" + integrity sha512-fxnLadXs59qOBE9dInfQjQ4DmbGToQ0NjfqqmN6N8qS+KsCecO6N0mMUrC95et9xTeimFRr+0l9UMfmRVHNS/w== "@commitlint/load@>6.1.1": - version "8.2.0" - resolved "https://registry.npm.taobao.org/@commitlint/load/download/@commitlint/load-8.2.0.tgz#9ca53a0c795e4f63d796b4d42279e856549add1a" - integrity sha1-nKU6DHleT2PXlrTUInnoVlSa3Ro= - dependencies: - "@commitlint/execute-rule" "^8.2.0" - "@commitlint/resolve-extends" "^8.2.0" - babel-runtime "^6.23.0" - chalk "2.4.2" - cosmiconfig "^5.2.0" - lodash "4.17.14" + version "9.0.1" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-9.0.1.tgz#02ba5795e56da9d6c83dccdc36a6ac940d048c36" + integrity sha512-6ix/pUjVAggmDLTcnpyk0bgY3H9UBBTsEeFvTkHV+WQ6LNIxsQk8SwEOEZzWHUqt0pxqMQeiUgYeSZsSw2+uiw== + dependencies: + "@commitlint/execute-rule" "^9.0.1" + "@commitlint/resolve-extends" "^9.0.1" + "@commitlint/types" "^9.0.1" + chalk "3.0.0" + cosmiconfig "^6.0.0" + lodash "^4.17.15" resolve-from "^5.0.0" -"@commitlint/resolve-extends@^8.2.0": - version "8.2.0" - resolved "https://registry.npm.taobao.org/@commitlint/resolve-extends/download/@commitlint/resolve-extends-8.2.0.tgz#b7f2f0c71c10f24b98a199ed11d2c14cfd7a318f" - integrity sha1-t/LwxxwQ8kuYoZntEdLBTP16MY8= +"@commitlint/resolve-extends@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-9.0.1.tgz#1b8b03c2b91602cb1c6b0feac41c6636b2c517ba" + integrity sha512-o6Lya2ILg1tEfWatS5x8w4ImvDzwb1whxsr2c/cxVCFqLF4hxHHHniZ0NJ+HFhYa1kBsYeKlD1qn9fHX5Y1+PQ== dependencies: - "@types/node" "^12.0.2" import-fresh "^3.0.0" - lodash "4.17.14" + lodash "^4.17.15" resolve-from "^5.0.0" resolve-global "^1.0.0" +"@commitlint/types@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-9.0.1.tgz#df281f0f3d8f3adb10c95e4dd72b16acf41b5400" + integrity sha512-wo2rHprtDzTHf4tiSxavktJ52ntiwmg7eHNGFLH38G1of8OfGVwOc1sVbpM4jN/HK/rCMhYOi6xzoPqsv0537A== + "@jest/console@^24.7.1": version "24.7.1" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" @@ -640,7 +644,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.12.tgz#cc791b402360db1eaf7176479072f91ee6c6c7ca" integrity sha512-Uy0PN4R5vgBUXFoJrKryf5aTk3kJ8Rv3PdlHjl6UaX+Cqp1QE0yPQ68MPXGrZOfG7gZVNDIJZYyot0B9ubXUrQ== -"@types/node@>= 8", "@types/node@^12.0.2": +"@types/node@>= 8": version "12.12.17" resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.17.tgz?cache=0&sync_timestamp=1576005747255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.17.tgz#191b71e7f4c325ee0fb23bc4a996477d92b8c39b" integrity sha1-GRtx5/TDJe4PsjvEqZZHfZK4w5s= @@ -876,6 +880,14 @@ ansi-styles@^4.0.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.npm.taobao.org/ansicolors/download/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -1100,14 +1112,6 @@ babel-preset-jest@^24.6.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.6.0" -babel-runtime@^6.23.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1298,8 +1302,8 @@ cache-base@^1.0.1: cachedir@2.2.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/cachedir/download/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" - integrity sha1-Ga+kMF4F155BdWaILgyPlg9i/w4= + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" + integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ== call-limit@^1.1.1: version "1.1.1" @@ -1374,14 +1378,13 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +chalk@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" @@ -1394,6 +1397,15 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1562887878067&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1602,12 +1614,12 @@ commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== commitizen@^4.0.3: - version "4.0.3" - resolved "https://registry.npm.taobao.org/commitizen/download/commitizen-4.0.3.tgz#c19a4213257d0525b85139e2f36db7cc3b4f6dae" - integrity sha1-wZpCEyV9BSW4UTni8223zDtPba4= + version "4.1.2" + resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.1.2.tgz#6095eb825fd3f0d3611df88e6803c69b23307e9a" + integrity sha512-LBxTQKHbVgroMz9ohpm86N+GfJobonGyvDc3zBGdZazbwCLz2tqLa48Rf2TnAdKx7/06W1i1R3SXUt5QW97qVQ== dependencies: cachedir "2.2.0" - cz-conventional-changelog "3.0.1" + cz-conventional-changelog "3.2.0" dedent "0.7.0" detect-indent "6.0.0" find-node-modules "2.0.0" @@ -1617,8 +1629,7 @@ commitizen@^4.0.3: inquirer "6.5.0" is-utf8 "^0.2.1" lodash "4.17.15" - minimist "1.2.0" - shelljs "0.7.6" + minimist "1.2.5" strip-bom "4.0.0" strip-json-comments "3.0.1" @@ -1699,10 +1710,10 @@ conventional-changelog-writer@^4.0.0: split "^1.0.0" through2 "^3.0.0" -conventional-commit-types@^2.0.0: - version "2.3.0" - resolved "https://registry.npm.taobao.org/conventional-commit-types/download/conventional-commit-types-2.3.0.tgz#bc3c8ebba0a9e4b3ecc548f1d0674e251ab8be22" - integrity sha1-vDyOu6Cp5LPsxUjx0GdOJRq4viI= +conventional-commit-types@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.2: version "2.0.2" @@ -1749,11 +1760,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^2.4.0: - version "2.6.11" - resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw= - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1857,31 +1863,16 @@ cyclist@^1.0.1: resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cz-conventional-changelog@3.0.1: - version "3.0.1" - resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.0.1.tgz#b1f207ae050355e7ada65aad5c52e9de3d0c8e5b" - integrity sha1-sfIHrgUDVeetplqtXFLp3j0Mjls= - dependencies: - chalk "^2.4.1" - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - right-pad "^1.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -cz-conventional-changelog@3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.0.2.tgz#f6b9a406177ab07f9a3a087e06103a045b376260" - integrity sha1-9rmkBhd6sH+aOgh+BhA6BFs3YmA= +cz-conventional-changelog@3.2.0, cz-conventional-changelog@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477" + integrity sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg== dependencies: chalk "^2.4.1" commitizen "^4.0.3" - conventional-commit-types "^2.0.0" + conventional-commit-types "^3.0.0" lodash.map "^4.5.1" longest "^2.0.1" - right-pad "^1.0.1" word-wrap "^1.0.3" optionalDependencies: "@commitlint/load" ">6.1.1" @@ -2043,13 +2034,13 @@ deprecation@^2.0.0: detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/detect-file/download/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= detect-indent@6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha1-Cr0PVJ9p/GZZolT+lnhhhrb1KP0= + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== detect-indent@~5.0.0: version "5.0.0" @@ -2484,7 +2475,7 @@ expand-brackets@^2.1.4: expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/expand-tilde/download/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: homedir-polyfill "^1.0.1" @@ -2659,8 +2650,8 @@ fill-range@^7.0.1: find-node-modules@2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/find-node-modules/download/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" - integrity sha1-XbH7nmaKPUUds9YYzRZ83VnkG2k= + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" + integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== dependencies: findup-sync "^3.0.0" merge "^1.2.1" @@ -2672,8 +2663,8 @@ find-npm-prefix@^1.0.2: find-root@1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/find-root/download/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ= + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" @@ -2706,8 +2697,8 @@ find-versions@^3.0.0: findup-sync@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/findup-sync/download/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha1-F7EI+e5RLft6XH88iyfqnhqcCNE= + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== dependencies: detect-file "^1.0.0" is-glob "^4.0.0" @@ -2973,18 +2964,6 @@ glob@7.1.4, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0: - version "7.1.6" - resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078079496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.1.4: version "7.1.5" resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" @@ -2999,15 +2978,15 @@ glob@^7.1.4: global-dirs@^0.1.0, global-dirs@^0.1.1: version "0.1.1" - resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz?cache=0&sync_timestamp=1573231918216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal-dirs%2Fdownload%2Fglobal-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= dependencies: ini "^1.3.4" global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/global-modules/download/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o= + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" @@ -3015,7 +2994,7 @@ global-modules@^1.0.0: global-prefix@^1.0.1: version "1.0.2" - resolved "https://registry.npm.taobao.org/global-prefix/download/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= dependencies: expand-tilde "^2.0.2" @@ -3143,6 +3122,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" @@ -3193,8 +3177,8 @@ has@^1.0.1, has@^1.0.3: homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg= + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" @@ -3425,8 +3409,8 @@ init-package-json@^1.10.3: inquirer@6.5.0: version "6.5.0" - resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha1-IwMxfvyaTqfsLi32+GVptzSsz0I= + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== dependencies: ansi-escapes "^3.2.0" chalk "^2.4.2" @@ -3461,11 +3445,6 @@ inquirer@^7.0.0: strip-ansi "^5.1.0" through "^2.3.6" -interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/interpret/download/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY= - into-stream@^5.0.0: version "5.1.1" resolved "https://registry.npm.taobao.org/into-stream/download/into-stream-5.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finto-stream%2Fdownload%2Finto-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" @@ -3767,7 +3746,7 @@ is-typedarray@~1.0.0: is-utf8@^0.2.1: version "0.2.1" - resolved "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-windows@^1.0.1, is-windows@^1.0.2: @@ -4731,7 +4710,7 @@ lodash.isstring@^4.0.1: lodash.map@^4.5.1: version "4.6.0" - resolved "https://registry.npm.taobao.org/lodash.map/download/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= lodash.set@^4.3.2: @@ -4774,11 +4753,6 @@ lodash.without@~4.4.0: resolved "https://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@4.17.14: - version "4.17.14" - resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha1-nOSHrmbJYlT+ILWZ8htoFgKAeLo= - lodash@4.17.15, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" @@ -4819,7 +4793,7 @@ log-update@^2.3.0: longest@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/longest/download/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= loose-envify@^1.0.0: @@ -5007,8 +4981,8 @@ merge2@^1.2.3, merge2@^1.3.0: merge@^1.2.1: version "1.2.1" - resolved "https://registry.npm.taobao.org/merge/download/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU= + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" @@ -5084,7 +5058,12 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@1.2.0, minimist@^1.1.1, minimist@^1.2.0: +minimist@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -5193,7 +5172,7 @@ multimatch@^4.0.0: mute-stream@0.0.7: version "0.0.7" - resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= mute-stream@0.0.8, mute-stream@~0.0.4: @@ -5979,7 +5958,7 @@ parse-json@^5.0.0: parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse5@4.0.0: @@ -6380,8 +6359,8 @@ read-pkg-up@^4.0.0: read-pkg-up@^7.0.0: version "7.0.1" - resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc= + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" @@ -6472,13 +6451,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - redent@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/redent/download/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" @@ -6494,11 +6466,6 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk= - regenerator-runtime@^0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" @@ -6621,7 +6588,7 @@ resolve-cwd@^2.0.0: resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/resolve-dir/download/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= dependencies: expand-tilde "^2.0.0" @@ -6644,8 +6611,8 @@ resolve-from@^5.0.0: resolve-global@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/resolve-global/download/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" - integrity sha1-oqed9K8so/Sb93753azTItrRklU= + resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== dependencies: global-dirs "^0.1.1" @@ -6666,13 +6633,6 @@ resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: dependencies: path-parse "^1.0.6" -resolve@^1.1.6: - version "1.13.1" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" - integrity sha1-vgqkwGrNUwg1BauzX01mkyqzXRY= - dependencies: - path-parse "^1.0.6" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6709,11 +6669,6 @@ reusify@^1.0.0: resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= -right-pad@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/right-pad/download/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" - integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= - rimraf@2, rimraf@^2.5.2: version "2.7.1" resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -6933,15 +6888,6 @@ shebang-regex@^3.0.0: resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= -shelljs@0.7.6: - version "0.7.6" - resolved "https://registry.npm.taobao.org/shelljs/download/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" - integrity sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0= - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -7368,8 +7314,8 @@ strip-ansi@^6.0.0: strip-bom@4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg= + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-bom@^3.0.0: version "3.0.0" @@ -7393,8 +7339,8 @@ strip-indent@^2.0.0: strip-json-comments@3.0.1, strip-json-comments@^3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha1-hXE5dakfuHvxswXMp3OV5A0qZKc= + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== strip-json-comments@~2.0.1: version "2.0.1" @@ -7420,6 +7366,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" @@ -8045,8 +7998,8 @@ windows-release@^3.1.0: word-wrap@^1.0.3: version "1.2.3" - resolved "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha1-YQY29rH3A4kb00dxzLF/uTtHB5w= + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@~0.0.2: version "0.0.3" From 687e96f1495de12bc7acd37bf56af57af490b0b6 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 9 Jul 2020 00:04:24 +0800 Subject: [PATCH 372/497] fix: improve tokens separator --- src/model/model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/model.ts b/src/model/model.ts index 1f003bf8..c1c8e8fc 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -81,7 +81,7 @@ export class Model { ast.value = value; if (sec === 'r' || sec === 'p') { - const tokens = value.split(', '); + const tokens = value.split(',').map(n => n.trim()); for (let i = 0; i < tokens.length; i++) { tokens[i] = key + '_' + tokens[i]; From b434a942e551bce8e3836da1e6afce85ff66dc79 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 8 Jul 2020 16:30:21 +0000 Subject: [PATCH 373/497] chore(release): 5.0.5 [skip ci] ## [5.0.5](https://github.com/casbin/node-casbin/compare/v5.0.4...v5.0.5) (2020-07-08) ### Bug Fixes * improve tokens separator ([687e96f](https://github.com/casbin/node-casbin/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45b65e21..aa1e7352 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.0.5](https://github.com/casbin/node-casbin/compare/v5.0.4...v5.0.5) (2020-07-08) + + +### Bug Fixes + +* improve tokens separator ([687e96f](https://github.com/casbin/node-casbin/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) + ## [5.0.4](https://github.com/casbin/node-casbin/compare/v5.0.3...v5.0.4) (2020-06-08) ### Bug Fixes diff --git a/package.json b/package.json index 9e332865..4fbe8085 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.4", + "version": "5.0.5", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From b85673432f8a150490fd5134797508ccd368b81f Mon Sep 17 00:00:00 2001 From: divy9881 Date: Thu, 16 Jul 2020 12:42:41 +0530 Subject: [PATCH 374/497] fix: add casbin-cpp to supported languages. Signed-off-by: divy9881 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2ebfb53e..c4b7c70d 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ | [Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) | | production-ready | production-ready | production-ready | production-ready | -| [![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://casbin.org/img/langs/delphi.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | -| [PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/casbin/casbin-rs) | -| production-ready | production-ready | experimental | production-ready | +| [![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![c++](https://casbin.org/img/langs/cpp.png)](https://github.com/casbin/casbin-cpp) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | +| [PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin-CPP](https://github.com/casbin/casbin-cpp) | [Casbin-RS](https://github.com/casbin/casbin-rs) | +| production-ready | production-ready | beta-test | production-ready | ## Documentation From 50b4a8502fab97845bf9c2ae115d3ca28b92121c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 16 Jul 2020 10:26:08 +0000 Subject: [PATCH 375/497] chore(release): 5.0.6 [skip ci] ## [5.0.6](https://github.com/casbin/node-casbin/compare/v5.0.5...v5.0.6) (2020-07-16) ### Bug Fixes * add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/node-casbin/commit/b85673432f8a150490fd5134797508ccd368b81f)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa1e7352..767a037c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.0.6](https://github.com/casbin/node-casbin/compare/v5.0.5...v5.0.6) (2020-07-16) + + +### Bug Fixes + +* add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/node-casbin/commit/b85673432f8a150490fd5134797508ccd368b81f)) + ## [5.0.5](https://github.com/casbin/node-casbin/compare/v5.0.4...v5.0.5) (2020-07-08) diff --git a/package.json b/package.json index 4fbe8085..edd59245 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.5", + "version": "5.0.6", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/index.js", "typings": "lib/index.d.ts", From 4739871946f088eeff58a971aa97713b28827807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9D=89?= Date: Sun, 26 Jul 2020 23:38:07 +0800 Subject: [PATCH 376/497] chore: support ESM (#174) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 木杉 --- package-lock.json | 118 +- package.json | 17 +- tsconfig.cjs.json | 8 + tsconfig.esm.json | 8 + tsconfig.json | 13 +- yarn.lock | 8223 --------------------------------------------- 6 files changed, 149 insertions(+), 8238 deletions(-) create mode 100644 tsconfig.cjs.json create mode 100644 tsconfig.esm.json delete mode 100644 yarn.lock diff --git a/package-lock.json b/package-lock.json index 961ace17..edea87fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.4", + "version": "5.0.6", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -7245,6 +7245,12 @@ "escape-string-regexp": "^1.0.4" } }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, "meow": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", @@ -11209,6 +11215,94 @@ } } }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -11577,6 +11671,12 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -12839,6 +12939,12 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", @@ -13268,6 +13374,16 @@ } } }, + "string.prototype.padend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "string.prototype.trimend": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", diff --git a/package.json b/package.json index edd59245..ff091a5e 100644 --- a/package.json +++ b/package.json @@ -2,17 +2,21 @@ "name": "casbin", "version": "5.0.6", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", - "main": "lib/index.js", - "typings": "lib/index.d.ts", + "main": "lib/cjs/index.js", + "typings": "lib/cjs/index.d.ts", + "module": "lib/esm/index.js", "scripts": { - "prepack": "yarn run lint && yarn run test && yarn build", - "postpack": "rimraf lib", - "build": "rimraf lib && tsc", + "prepack": "run-s lint test build", + "postpack": "run-s clean", + "build": "run-s clean && run-p build:*", + "build:cjs": "tsc -p tsconfig.cjs.json", + "build:esm": "tsc -p tsconfig.esm.json", "test": "jest", "lint": "eslint . --ext .js,.ts", "fmt": "eslint . --ext .js,.ts --fix", "semantic-release": "semantic-release", - "commit": "git-cz" + "commit": "git-cz", + "clean": "rimraf lib" }, "devDependencies": { "@semantic-release/changelog": "^3.0.6", @@ -32,6 +36,7 @@ "husky": "^2.3.0", "jest": "^24.3.1", "lint-staged": "^8.1.7", + "npm-run-all": "^4.1.5", "prettier": "^1.19.1", "pretty-quick": "^2.0.1", "rimraf": "^2.6.2", diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 00000000..78c4457c --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "outDir": "lib/cjs" + } +} diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 00000000..05ee7100 --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "outDir": "lib/esm" + } +} diff --git a/tsconfig.json b/tsconfig.json index 621b0719..75561eae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,12 @@ { "compilerOptions": { - "target": "es6", - "module": "commonjs", - "moduleResolution": "node", + "target": "ES6", + "module": "CommonJS", + "moduleResolution": "Node", "strict": true, "strictPropertyInitialization": false, "declaration": true, - "declarationDir": "lib", - "outDir": "lib" + "downlevelIteration": true }, - "include": [ - "src/**/*" - ] + "include": ["src/**/*"] } diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index e499c789..00000000 --- a/yarn.lock +++ /dev/null @@ -1,8223 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@^7.1.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.0.tgz#6ed6a2881ad48a732c5433096d96d1b0ee5eb734" - integrity sha512-6Isr4X98pwXqHvtigw71CKgmhL1etZjPs5A67jL/w0TkLM9eqmFR40YrnJvEc1WnMZFsskjsmid8bHZyxKEAnw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.5.0" - "@babel/helpers" "^7.5.0" - "@babel/parser" "^7.5.0" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.0" - "@babel/types" "^7.5.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.11" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.4.0", "@babel/generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.0.tgz#f20e4b7a91750ee8b63656073d843d2a736dca4a" - integrity sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA== - dependencies: - "@babel/types" "^7.5.0" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helpers@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.0.tgz#7f0c17666e7ed8355ed6eff643dde12fb681ddb4" - integrity sha512-EgCUEa8cNwuMrwo87l2d7i2oShi8m2Q58H7h3t4TWtqATZalJYFwfL9DulRe02f3KdqM9xmMCw3v/7Ll+EiaWg== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.0" - "@babel/types" "^7.5.0" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.0.tgz#3e0713dff89ad6ae37faec3b29dcfc5c979770b7" - integrity sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA== - -"@babel/plugin-syntax-object-rest-spread@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/runtime@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.0.tgz#49dcbcd637099a55d3a61e590a00d6861393b1b5" - integrity sha512-2xsuyZ0R0RBFwjgae5NpXk8FcfH4qovj5cEM5VEeB7KXnKqzaisIu2HSV/mCEISolJJuR4wkViUGYujA8MH9tw== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.6.3": - version "7.7.6" - resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.7.6.tgz?cache=0&sync_timestamp=1575764734217&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" - integrity sha1-0YxRESGv8bTyzR1FLxuslgHdgw8= - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485" - integrity sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.5.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.0" - "@babel/types" "^7.5.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" - -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab" - integrity sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ== - dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" - -"@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@commitlint/execute-rule@^9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-9.0.1.tgz#59993cf87103d75b56c6ae790cd4240c1863b3c2" - integrity sha512-fxnLadXs59qOBE9dInfQjQ4DmbGToQ0NjfqqmN6N8qS+KsCecO6N0mMUrC95et9xTeimFRr+0l9UMfmRVHNS/w== - -"@commitlint/load@>6.1.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-9.0.1.tgz#02ba5795e56da9d6c83dccdc36a6ac940d048c36" - integrity sha512-6ix/pUjVAggmDLTcnpyk0bgY3H9UBBTsEeFvTkHV+WQ6LNIxsQk8SwEOEZzWHUqt0pxqMQeiUgYeSZsSw2+uiw== - dependencies: - "@commitlint/execute-rule" "^9.0.1" - "@commitlint/resolve-extends" "^9.0.1" - "@commitlint/types" "^9.0.1" - chalk "3.0.0" - cosmiconfig "^6.0.0" - lodash "^4.17.15" - resolve-from "^5.0.0" - -"@commitlint/resolve-extends@^9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-9.0.1.tgz#1b8b03c2b91602cb1c6b0feac41c6636b2c517ba" - integrity sha512-o6Lya2ILg1tEfWatS5x8w4ImvDzwb1whxsr2c/cxVCFqLF4hxHHHniZ0NJ+HFhYa1kBsYeKlD1qn9fHX5Y1+PQ== - dependencies: - import-fresh "^3.0.0" - lodash "^4.17.15" - resolve-from "^5.0.0" - resolve-global "^1.0.0" - -"@commitlint/types@^9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-9.0.1.tgz#df281f0f3d8f3adb10c95e4dd72b16acf41b5400" - integrity sha512-wo2rHprtDzTHf4tiSxavktJ52ntiwmg7eHNGFLH38G1of8OfGVwOc1sVbpM4jN/HK/rCMhYOi6xzoPqsv0537A== - -"@jest/console@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" - integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg== - dependencies: - "@jest/source-map" "^24.3.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/core@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.8.0.tgz#fbbdcd42a41d0d39cddbc9f520c8bab0c33eed5b" - integrity sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A== - dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.8.0" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" - jest-regex-util "^24.3.0" - jest-resolve-dependencies "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - jest-watcher "^24.8.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - pirates "^4.0.1" - realpath-native "^1.1.0" - rimraf "^2.5.4" - strip-ansi "^5.0.0" - -"@jest/environment@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.8.0.tgz#0342261383c776bdd652168f68065ef144af0eac" - integrity sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw== - dependencies: - "@jest/fake-timers" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - -"@jest/fake-timers@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1" - integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw== - dependencies: - "@jest/types" "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" - -"@jest/reporters@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.8.0.tgz#075169cd029bddec54b8f2c0fc489fd0b9e05729" - integrity sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.1.1" - jest-haste-map "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" - node-notifier "^5.2.1" - slash "^2.0.0" - source-map "^0.6.0" - string-length "^2.0.0" - -"@jest/source-map@^24.3.0": - version "24.3.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" - integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - -"@jest/test-result@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3" - integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng== - dependencies: - "@jest/console" "^24.7.1" - "@jest/types" "^24.8.0" - "@types/istanbul-lib-coverage" "^2.0.0" - -"@jest/test-sequencer@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz#2f993bcf6ef5eb4e65e8233a95a3320248cf994b" - integrity sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg== - dependencies: - "@jest/test-result" "^24.8.0" - jest-haste-map "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" - -"@jest/transform@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5" - integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.8.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.8.0" - jest-regex-util "^24.3.0" - jest-util "^24.8.0" - micromatch "^3.1.10" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" - -"@jest/types@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad" - integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^12.0.9" - -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz?cache=0&sync_timestamp=1570173514495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha1-Olgr21OATGum0UZXnEblITDPSjs= - dependencies: - "@nodelib/fs.stat" "2.0.3" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M= - -"@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz?cache=0&sync_timestamp=1570173624145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY= - dependencies: - "@nodelib/fs.scandir" "2.1.3" - fastq "^1.6.0" - -"@octokit/endpoint@^5.5.0": - version "5.5.1" - resolved "https://registry.npm.taobao.org/@octokit/endpoint/download/@octokit/endpoint-5.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Fendpoint%2Fdownload%2F%40octokit%2Fendpoint-5.5.1.tgz#2eea81e110ca754ff2de11c79154ccab4ae16b3f" - integrity sha1-LuqB4RDKdU/y3hHHkVTMq0rhaz8= - dependencies: - "@octokit/types" "^2.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^4.0.0" - -"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.2.0" - resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-1.2.0.tgz#a64d2a9d7a13555570cd79722de4a4d76371baaa" - integrity sha1-pk0qnXoTVVVwzXlyLeSk12Nxuqo= - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.2.0": - version "5.3.1" - resolved "https://registry.npm.taobao.org/@octokit/request/download/@octokit/request-5.3.1.tgz#3a1ace45e6f88b1be4749c5da963b3a3b4a2f120" - integrity sha1-OhrOReb4ixvkdJxdqWOzo7Si8SA= - dependencies: - "@octokit/endpoint" "^5.5.0" - "@octokit/request-error" "^1.0.1" - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/rest@^16.27.0": - version "16.35.0" - resolved "https://registry.npm.taobao.org/@octokit/rest/download/@octokit/rest-16.35.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Frest%2Fdownload%2F%40octokit%2Frest-16.35.0.tgz#7ccc1f802f407d5b8eb21768c6deca44e7b4c0d8" - integrity sha1-fMwfgC9AfVuOshdoxt7KROe0wNg= - dependencies: - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/types@^2.0.0": - version "2.0.2" - resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-2.0.2.tgz#0888497f5a664e28b0449731d5e88e19b2a74f90" - integrity sha1-CIhJf1pmTiiwRJcx1eiOGbKnT5A= - dependencies: - "@types/node" ">= 8" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== - dependencies: - any-observable "^0.3.0" - -"@semantic-release/changelog@^3.0.6": - version "3.0.6" - resolved "https://registry.npm.taobao.org/@semantic-release/changelog/download/@semantic-release/changelog-3.0.6.tgz#9d68d68bf732cbba1034c028bb6720091f783b2a" - integrity sha1-nWjWi/cyy7oQNMAou2cgCR94Oyo= - dependencies: - "@semantic-release/error" "^2.1.0" - aggregate-error "^3.0.0" - fs-extra "^8.0.0" - lodash "^4.17.4" - -"@semantic-release/commit-analyzer@^6.1.0": - version "6.3.3" - resolved "https://registry.npm.taobao.org/@semantic-release/commit-analyzer/download/@semantic-release/commit-analyzer-6.3.3.tgz#885f7e46e2f0aef23a23be0904dbf18d6ece45ca" - integrity sha1-iF9+RuLwrvI6I74JBNvxjW7ORco= - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.0.7" - debug "^4.0.0" - import-from "^3.0.0" - lodash "^4.17.4" - -"@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": - version "2.2.0" - resolved "https://registry.npm.taobao.org/@semantic-release/error/download/@semantic-release/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" - integrity sha1-7p1aCcmWnq3h7IZHdq7aXFzdu/A= - -"@semantic-release/git@^7.0.18": - version "7.0.18" - resolved "https://registry.npm.taobao.org/@semantic-release/git/download/@semantic-release/git-7.0.18.tgz#f37c076bc094762cb343dab49ab893d31de961e8" - integrity sha1-83wHa8CUdiyzQ9q0mriT0x3pYeg= - dependencies: - "@semantic-release/error" "^2.1.0" - aggregate-error "^3.0.0" - debug "^4.0.0" - dir-glob "^3.0.0" - execa "^3.2.0" - fs-extra "^8.0.0" - globby "^10.0.0" - lodash "^4.17.4" - micromatch "^4.0.0" - p-reduce "^2.0.0" - -"@semantic-release/github@^5.1.0": - version "5.5.5" - resolved "https://registry.npm.taobao.org/@semantic-release/github/download/@semantic-release/github-5.5.5.tgz#4666367f16d8ad91fd1d3c71a7238498de14ec38" - integrity sha1-RmY2fxbYrZH9HTxxpyOEmN4U7Dg= - dependencies: - "@octokit/rest" "^16.27.0" - "@semantic-release/error" "^2.2.0" - aggregate-error "^3.0.0" - bottleneck "^2.18.1" - debug "^4.0.0" - dir-glob "^3.0.0" - fs-extra "^8.0.0" - globby "^10.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - issue-parser "^5.0.0" - lodash "^4.17.4" - mime "^2.4.3" - p-filter "^2.0.0" - p-retry "^4.0.0" - url-join "^4.0.0" - -"@semantic-release/npm@^5.0.5": - version "5.3.4" - resolved "https://registry.npm.taobao.org/@semantic-release/npm/download/@semantic-release/npm-5.3.4.tgz#2998cd9455aaedf278334d4a5b56f8e0b715919d" - integrity sha1-KZjNlFWq7fJ4M01KW1b44LcVkZ0= - dependencies: - "@semantic-release/error" "^2.2.0" - aggregate-error "^3.0.0" - execa "^3.2.0" - fs-extra "^8.0.0" - lodash "^4.17.15" - nerf-dart "^1.0.0" - normalize-url "^4.0.0" - npm "^6.10.3" - rc "^1.2.8" - read-pkg "^5.0.0" - registry-auth-token "^4.0.0" - tempy "^0.3.0" - -"@semantic-release/release-notes-generator@^7.1.2": - version "7.3.5" - resolved "https://registry.npm.taobao.org/@semantic-release/release-notes-generator/download/@semantic-release/release-notes-generator-7.3.5.tgz#ed0941d5b594f18fa1d2667493c03e811f97c0ff" - integrity sha1-7QlB1bWU8Y+h0mZ0k8A+gR+XwP8= - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-changelog-writer "^4.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.0.0" - debug "^4.0.0" - get-stream "^5.0.0" - import-from "^3.0.0" - into-stream "^5.0.0" - lodash "^4.17.4" - read-pkg-up "^7.0.0" - -"@types/babel__core@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f" - integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" - integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== - dependencies: - "@babel/types" "^7.3.0" - -"@types/braces@*": - version "3.0.0" - resolved "https://registry.npm.taobao.org/@types/braces/download/@types/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" - integrity sha1-faHA1E/xx+tmCjbsB46mG6frQss= - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA= - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz?cache=0&sync_timestamp=1572470950582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Feslint-visitor-keys%2Fdownload%2F%40types%2Feslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0= - -"@types/events@*": - version "3.0.0" - resolved "https://registry.npm.taobao.org/@types/events/download/@types/events-3.0.0.tgz?cache=0&sync_timestamp=1572461479213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fevents%2Fdownload%2F%40types%2Fevents-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha1-KGLz9Yqaf3w+eNefEw3U1xwlwqc= - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.1.tgz?cache=0&sync_timestamp=1572462281559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha1-qlmhxuP7xCHgfM0xqUTDDrpSFXU= - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/ip@^0.0.31": - version "0.0.31" - resolved "https://registry.yarnpkg.com/@types/ip/-/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" - integrity sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== - -"@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== - -"@types/jest@^24.0.11": - version "24.0.15" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.15.tgz#6c42d5af7fe3b44ffff7cc65de7bf741e8fa427f" - integrity sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA== - dependencies: - "@types/jest-diff" "*" - -"@types/json-schema@^7.0.3": - version "7.0.3" - resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" - integrity sha1-vf1p1h5GTcyBslFZwnDXWnPBpjY= - -"@types/lodash@^4.14.113": - version "4.14.135" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.135.tgz#d2607c35dd68f70c2b35ba020c667493dedd8447" - integrity sha512-Ed+tSZ9qM1oYpi5kzdsBuOzcAIn1wDW+e8TFJ50IMJMlSopGdJgKAbhHzN6h1E1OfjlGOr2JepzEWtg9NIfoNg== - -"@types/micromatch@^4.0.1": - version "4.0.1" - resolved "https://registry.npm.taobao.org/@types/micromatch/download/@types/micromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" - integrity sha1-k4FEndZZ/Dgj/SpBkM6syYUIO8c= - dependencies: - "@types/braces" "*" - -"@types/minimatch@*", "@types/minimatch@^3.0.3": - version "3.0.3" - resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0= - -"@types/node@*": - version "12.0.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.12.tgz#cc791b402360db1eaf7176479072f91ee6c6c7ca" - integrity sha512-Uy0PN4R5vgBUXFoJrKryf5aTk3kJ8Rv3PdlHjl6UaX+Cqp1QE0yPQ68MPXGrZOfG7gZVNDIJZYyot0B9ubXUrQ== - -"@types/node@>= 8": - version "12.12.17" - resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.17.tgz?cache=0&sync_timestamp=1576005747255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.17.tgz#191b71e7f4c325ee0fb23bc4a996477d92b8c39b" - integrity sha1-GRtx5/TDJe4PsjvEqZZHfZK4w5s= - -"@types/node@^10.5.3": - version "10.14.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.12.tgz#0eec3155a46e6c4db1f27c3e588a205f767d622f" - integrity sha512-QcAKpaO6nhHLlxWBvpc4WeLrTvPqlHOvaj0s5GriKkA1zq+bsFBPpfYCvQhLqLgYlIko8A9YrPdaMHCo5mBcpg== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= - -"@types/retry@^0.12.0": - version "0.12.0" - resolved "https://registry.npm.taobao.org/@types/retry/download/@types/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha1-KzXsz87n04zXKtmSMvvVi/+zyE0= - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": - version "12.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" - integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== - -"@typescript-eslint/eslint-plugin@^2.6.1": - version "2.6.1" - resolved "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-2.6.1.tgz#e34972a24f8aba0861f9ccf7130acd74fd11e079" - integrity sha1-40lyok+Kughh+cz3EwrNdP0R4Hk= - dependencies: - "@typescript-eslint/experimental-utils" "2.6.1" - eslint-utils "^1.4.2" - functional-red-black-tree "^1.0.1" - regexpp "^2.0.1" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@2.6.1": - version "2.6.1" - resolved "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-2.6.1.tgz#eddaca17a399ebf93a8628923233b4f93793acfd" - integrity sha1-7drKF6OZ6/k6hiiSMjO0+TeTrP0= - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.6.1" - eslint-scope "^5.0.0" - -"@typescript-eslint/parser@^2.6.1": - version "2.6.1" - resolved "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-2.6.1.tgz#3c00116baa0d696bc334ca18ac5286b34793993c" - integrity sha1-PAARa6oNaWvDNMoYrFKGs0eTmTw= - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.6.1" - "@typescript-eslint/typescript-estree" "2.6.1" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.6.1": - version "2.6.1" - resolved "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.6.1.tgz#fb363dd4ca23384745c5ea4b7f4c867432b00d31" - integrity sha1-+zY91MojOEdFxepLf0yGdDKwDTE= - dependencies: - debug "^4.1.1" - glob "^7.1.4" - is-glob "^4.0.1" - lodash.unescape "4.0.1" - semver "^6.3.0" - tsutils "^3.17.1" - -JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha1-MgjB8I06TZkmGrZPkjArwV4RHKA= - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== - -abbrev@1, abbrev@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-globals@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" - integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.1.0: - version "5.1.0" - resolved "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" - integrity sha1-KUrbcbVzmLBoABXwo4xWPuHbU4Q= - -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - -acorn@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" - integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== - -acorn@^7.1.0: - version "7.1.0" - resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" - integrity sha1-lJ028sKSU12mAig1hsJHfFfrLWw= - -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4= - dependencies: - es6-promisify "^5.0.0" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk= - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.5.2.tgz?cache=0&sync_timestamp=1570869777482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagentkeepalive%2Fdownload%2Fagentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c= - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.0.1" - resolved "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" - integrity sha1-2y/nJG5Tb0DZtUQqOeEX191qJOA= - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.10.2: - version "6.10.2" - resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.10.2.tgz?cache=0&sync_timestamp=1563113786760&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha1-086gTWsBeyiUrWkED+yLYj60vVI= - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - -ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1: - version "4.2.1" - resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" - integrity sha1-TczbhGw+7hD21k3qZic+q5DDcig= - dependencies: - type-fest "^0.5.2" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.0.tgz?cache=0&sync_timestamp=1573557674483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" - integrity sha1-VoHw3PeuWICnhB2IMcRyTtnMAXI= - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.npm.taobao.org/ansicolors/download/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= - -ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.npm.taobao.org/ansistyles/download/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -"aproba@^1.1.2 || 2", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/aproba/download/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha1-UlILiuW1aSFbNU78DKo/4eRaitw= - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argv-formatter@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/argv-formatter/download/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" - integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/array-differ/download/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha1-PLs9DzFoEOr8xHYkc0I31q7krms= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/array-ify/download/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/arrify/download/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo= - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/atob-lite/download/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -await-lock@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/await-lock/download/await-lock-2.0.1.tgz#b3f65fdf66e08f7538260f79b46c15bcfc18cadd" - integrity sha1-s/Zf32bgj3U4Jg95tGwVvPwYyt0= - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -babel-jest@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589" - integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw== - dependencies: - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.6.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-plugin-istanbul@^5.1.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz#841d16b9a58eeb407a0ddce622ba02fe87a752ba" - integrity sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ== - dependencies: - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - -babel-plugin-jest-hoist@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" - integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== - dependencies: - "@types/babel__traverse" "^7.0.6" - -babel-preset-jest@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" - integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== - dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.6.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/before-after-hook/download/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU= - -bin-links@^1.1.2, bin-links@^1.1.6: - version "1.1.6" - resolved "https://registry.npm.taobao.org/bin-links/download/bin-links-1.1.6.tgz#30d33e810829305e5e61b90cfcb9a3a4f65eb516" - integrity sha1-MNM+gQgpMF5eYbkM/LmjpPZetRY= - dependencies: - bluebird "^3.5.3" - cmd-shim "^3.0.0" - gentle-fs "^2.3.0" - graceful-fs "^4.1.15" - npm-normalize-package-bin "^1.0.0" - write-file-atomic "^2.3.0" - -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= - -bottleneck@^2.18.1: - version "2.19.5" - resolved "https://registry.npm.taobao.org/bottleneck/download/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha1-XfC5D1n9R2VuvmPHiphBkgXK3ZE= - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1: - version "3.0.2" - resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= - dependencies: - fill-range "^7.0.1" - -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" - integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== - dependencies: - node-int64 "^0.4.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/btoa-lite/download/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/byline/download/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/byte-size/download/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha1-S2UQOaXs2Wdn5xo9ftOA5IvtQZE= - -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz?cache=0&sync_timestamp=1569877769995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A= - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cachedir@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" - integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ== - -call-limit@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/call-limit/download/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" - integrity sha1-7xXyZw2z8ZklV+LZZavEWebjWNQ= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha1-psC74fOPOqC5Ijjstv9Cw0TUE10= - -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.npm.taobao.org/cardinal/download/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1562887878067&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= - -chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== - -chownr@^1.1.2, chownr@^1.1.3: - version "1.1.3" - resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchownr%2Fdownload%2Fchownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha1-Qtg31SOWiNVfMDADpQgjD6ZycUI= - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc= - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cidr-regex@^2.0.10: - version "2.0.10" - resolved "https://registry.npm.taobao.org/cidr-regex/download/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" - integrity sha1-rxOHi9StcE3nfW3IAHmTWLOvpw0= - dependencies: - ip-regex "^2.1.0" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.npm.taobao.org/cli-columns/download/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= - dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= - dependencies: - restore-cursor "^3.1.0" - -cli-table3@^0.5.0, cli-table3@^0.5.1: - version "0.5.1" - resolved "https://registry.npm.taobao.org/cli-table3/download/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha1-AlI3LZTfxA29jfBgBfSPMfZW8gI= - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.npm.taobao.org/cli-table/download/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= - dependencies: - colors "1.0.3" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE= - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -cmd-shim@^3.0.0, cmd-shim@^3.0.3: - version "3.0.3" - resolved "https://registry.npm.taobao.org/cmd-shim/download/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" - integrity sha1-LDUjjT3zfZjs3X1fa43Gshytx8s= - dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/colors/download/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= - -columnify@~1.5.4: - version "1.5.4" - resolved "https://registry.npm.taobao.org/columnify/download/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.12.1, commander@^2.14.1, commander@^2.9.0, commander@~2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -commitizen@^4.0.3: - version "4.1.2" - resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.1.2.tgz#6095eb825fd3f0d3611df88e6803c69b23307e9a" - integrity sha512-LBxTQKHbVgroMz9ohpm86N+GfJobonGyvDc3zBGdZazbwCLz2tqLa48Rf2TnAdKx7/06W1i1R3SXUt5QW97qVQ== - dependencies: - cachedir "2.2.0" - cz-conventional-changelog "3.2.0" - dedent "0.7.0" - detect-indent "6.0.0" - find-node-modules "2.0.0" - find-root "1.1.0" - fs-extra "8.1.0" - glob "7.1.4" - inquirer "6.5.0" - is-utf8 "^0.2.1" - lodash "4.17.15" - minimist "1.2.5" - strip-bom "4.0.0" - strip-json-comments "3.0.1" - -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.npm.taobao.org/compare-func/download/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha1-D96NCRIA616AjK8l/mGMAvSOTvo= - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha1-xvJd767vJt8S3TNBSwAf6BpUP48= - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -conventional-changelog-angular@^5.0.0: - version "5.0.6" - resolved "https://registry.npm.taobao.org/conventional-changelog-angular/download/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" - integrity sha1-JpVAxiRVOt7YCcKaNQj9wrVEwFk= - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-writer@^4.0.0: - version "4.0.11" - resolved "https://registry.npm.taobao.org/conventional-changelog-writer/download/conventional-changelog-writer-4.0.11.tgz?cache=0&sync_timestamp=1573999204276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-changelog-writer%2Fdownload%2Fconventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" - integrity sha1-n1bSEi0gyW60i6rgvx3v+u0e26Q= - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" - dateformat "^3.0.0" - handlebars "^4.4.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^5.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^3.0.0" - -conventional-commit-types@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" - integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== - -conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.npm.taobao.org/conventional-commits-filter/download/conventional-commits-filter-2.0.2.tgz?cache=0&sync_timestamp=1570610922404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-filter%2Fdownload%2Fconventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha1-8SL4n7zVu4Hiry/KwCVNBi0QOcE= - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: - version "3.0.8" - resolved "https://registry.npm.taobao.org/conventional-commits-parser/download/conventional-commits-parser-3.0.8.tgz?cache=0&sync_timestamp=1573999204008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-parser%2Fdownload%2Fconventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" - integrity sha1-IzEKm9psk8h0IkN15ysJ+ydf5xA= - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^5.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" - -convert-source-map@^1.1.0, convert-source-map@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI= - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -coveralls@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.4.tgz#f50233c9c62fd0973f710fce85fd19dba24cff4b" - integrity sha512-eyqUWA/7RT0JagiL0tThVhjbIjoiEUyWCjtUJoOPcWoeofP5WK/jb2OJYoBFrR6DvplR+AxOyuBqk4JHkk5ykA== - dependencies: - growl "~> 1.10.0" - js-yaml "^3.11.0" - lcov-parse "^0.0.10" - log-driver "^1.2.7" - minimist "^1.2.0" - request "^2.86.0" - -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.1.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha1-CrVihuD3wk4VPQTMKqAn5DqaXRQ= - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -"cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.3.0.tgz#c36c466f7037fd30f03baa271b65f0f17b50585c" - integrity sha512-wXsoRfsRfsLVNaVzoKdqvEmK/5PFaEXNspVT22Ots6K/cnJdpoDKuQFw+qlMiXnmaif1OgeC466X1zISgAOcGg== - dependencies: - cssom "~0.3.6" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -cz-conventional-changelog@3.2.0, cz-conventional-changelog@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477" - integrity sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg== - dependencies: - chalk "^2.4.1" - commitizen "^4.0.3" - conventional-commit-types "^3.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.npm.taobao.org/dateformat/download/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha1-puN0maTZqc+F71hyBE1ikByYia4= - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= - dependencies: - ms "2.0.0" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@0.7.0, dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.npm.taobao.org/deprecation/download/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk= - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - -detect-indent@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== - -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= - -dezalgo@^1.0.0, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - -diff-sequences@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" - integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -dir-glob@^3.0.0, dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= - dependencies: - esutils "^2.0.2" - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-3.0.0.tgz?cache=0&sync_timestamp=1572620518450&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz?cache=0&sync_timestamp=1572620518450&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc= - dependencies: - is-obj "^1.0.0" - -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-5.0.1.tgz?cache=0&sync_timestamp=1571190782798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - integrity sha1-pTF0Wb09eauIz/bkQFemo/ux/O8= - -duplexer2@~0.1.0: - version "0.1.4" - resolved "https://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/editor/download/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.npm.taobao.org/encoding/download/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - -end-of-stream@^1.0.0: - version "1.4.4" - resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= - dependencies: - once "^1.4.0" - -end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -env-ci@^4.0.0: - version "4.5.1" - resolved "https://registry.npm.taobao.org/env-ci/download/env-ci-4.5.1.tgz#2ef014dcb974728b46d1244e491e9e6ccc1923ef" - integrity sha1-LvAU3Ll0cotG0SROSR6ebMwZI+8= - dependencies: - execa "^3.2.0" - java-properties "^1.0.0" - -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - -errno@~0.1.7: - version "0.1.7" - resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.5.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo= - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^1.9.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" - integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^6.5.0: - version "6.5.0" - resolved "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.5.0.tgz#aaf9a495e2a816865e541bfdbb73a65cc162b3eb" - integrity sha1-qvmkleKoFoZeVBv9u3OmXMFis+s= - dependencies: - get-stdin "^6.0.0" - -eslint-plugin-prettier@^3.1.1: - version "3.1.1" - resolved "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prettier%2Fdownload%2Feslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" - integrity sha1-UHuFYkENAqA/DdyUnGFvh3hS8ro= - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha1-6HyIh8c+jR7ITxylkWRcNYv8j7k= - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.2, eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8= - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.1.0.tgz?cache=0&sync_timestamp=1565705523991&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha1-4qgs6oT/JGrW+1f5veW0ZiFFnsI= - -eslint@^6.6.0: - version "6.6.0" - resolved "https://registry.npm.taobao.org/eslint/download/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04" - integrity sha1-SgGi+0jTKqzvVTDunFp48RqK/QQ= - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.1.2: - version "6.1.2" - resolved "https://registry.npm.taobao.org/espree/download/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" - integrity sha1-bCcmUJMrT5HDcU5ee19eLs9HJi0= - dependencies: - acorn "^7.1.0" - acorn-jsx "^5.1.0" - eslint-visitor-keys "^1.1.0" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg= - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8= - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= - -estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-2.1.0.tgz?cache=0&sync_timestamp=1571325189232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" - integrity sha1-5dPs2DfSpg7FDz2nj9OXZ3R7vpk= - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^3.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha1-wI7UVQ72XYWPrCaf/IVyRG8364k= - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -expect@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d" - integrity sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA== - dependencies: - "@jest/types" "^24.8.0" - ansi-styles "^3.2.0" - jest-get-type "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-regex-util "^24.3.0" - -expression-eval@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/expression-eval/-/expression-eval-2.0.0.tgz#156bc71a700b0c7797f47d8a7167ce4fba5c060c" - integrity sha512-8cFzfco37CdZQd4DTyZ+ncxQtPUTE0dcxvbGXYc17Ji+3MQSBkT+11GdfC7eO2duvLNuWjN7Ejqb0kLX/u2bBw== - dependencies: - jsep "^0.3.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&sync_timestamp=1562602052556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM= - -fast-glob@^3.0.3: - version "3.1.1" - resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.1.1.tgz?cache=0&sync_timestamp=1575197566634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.1.1.tgz#87ee30e9e9f3eb40d6f254a7997655da753d7c82" - integrity sha1-h+4w6enz60DW8lSnmXZV2nU9fII= - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.6.0" - resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" - integrity sha1-Tsijj0rCXyFJJnOtt+rpz+9H0cI= - dependencies: - reusify "^1.0.0" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= - dependencies: - bser "^2.0.0" - -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A= - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/figures/download/figures-3.1.0.tgz?cache=0&sync_timestamp=1571715625804&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" - integrity sha1-SxmN0H2NcVMGQoZK8tRd2eRZxOw= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w= - dependencies: - flat-cache "^2.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= - dependencies: - to-regex-range "^5.0.1" - -find-node-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" - integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== - dependencies: - findup-sync "^3.0.0" - merge "^1.2.1" - -find-npm-prefix@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/find-npm-prefix/download/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" - integrity sha1-jYzix4s7S55myKzGo3wjHrhBz98= - -find-root@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-versions@^3.0.0: - version "3.2.0" - resolved "https://registry.npm.taobao.org/find-versions/download/find-versions-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-versions%2Fdownload%2Ffind-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" - integrity sha1-ECl/mAMKeGgpaBaQVF72We0dJU4= - dependencies: - semver-regex "^2.0.0" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA= - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha1-aeV8qo8OrLwoHS4stFjUb9tEngg= - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/from2/download/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - -from2@^2.1.0, from2@^2.3.0: - version "2.3.0" - resolved "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@8.1.0, fs-extra@^8.0.0: - version "8.1.0" - resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== - dependencies: - minipass "^2.2.1" - -fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.npm.taobao.org/fs-vacuum/download/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= - dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" - -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: - version "1.0.10" - resolved "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/genfun/download/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc= - -gentle-fs@^2.3.0: - version "2.3.0" - resolved "https://registry.npm.taobao.org/gentle-fs/download/gentle-fs-2.3.0.tgz#13538db5029400f98684be4894e8a7d8f0d1ea7f" - integrity sha1-E1ONtQKUAPmGhL5IlOin2PDR6n8= - dependencies: - aproba "^1.1.2" - chownr "^1.1.2" - cmd-shim "^3.0.3" - fs-vacuum "^1.2.10" - graceful-fs "^4.1.11" - iferr "^0.1.5" - infer-owner "^1.0.4" - mkdirp "^0.5.1" - path-is-inside "^1.0.2" - read-cmd-shim "^1.0.1" - slide "^1.1.6" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs= - -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha1-ASA83JJZf5uQkGfD5lbMH008Tck= - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-log-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/git-log-parser/download/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" - integrity sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= - dependencies: - argv-formatter "~1.0.0" - spawn-error-forwarder "~1.0.0" - split2 "~1.0.0" - stream-combiner2 "~1.1.1" - through2 "~2.0.0" - traverse "~0.6.6" - -glob-parent@^5.0.0, glob-parent@^5.1.0: - version "5.1.0" - resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI= - dependencies: - is-glob "^4.0.1" - -glob@7.1.4, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.4: - version "7.1.5" - resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" - integrity sha1-ZxTGm+4g88PmTE3ZBVU+UytAzcA= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^0.1.0, global-dirs@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^10.0.0: - version "10.0.1" - resolved "https://registry.npm.taobao.org/globby/download/globby-10.0.1.tgz?cache=0&sync_timestamp=1562335642755&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" - integrity sha1-R4LDTLdd1oM1EzXFgpzDQg5gayI= - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: - version "4.2.3" - resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.3.tgz?cache=0&sync_timestamp=1571871306808&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM= - -"growl@~> 1.10.0": - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -handlebars@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -handlebars@^4.4.0: - version "4.5.3" - resolved "https://registry.npm.taobao.org/handlebars/download/handlebars-4.5.3.tgz?cache=0&sync_timestamp=1574061065936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandlebars%2Fdownload%2Fhandlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" - integrity sha1-XPdb2HFPdgVxNRGla+fDSb7LBII= - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0, has-unicode@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hook-std@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/hook-std/download/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" - integrity sha1-/5qv3rtqmJo1T3KbtkRc9KOnB3w= - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -hosted-git-info@^2.7.1, hosted-git-info@^2.8.5: - version "2.8.5" - resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha1-dZz88sTRVq3lmwst+r3cQqa5xww= - -hosted-git-info@^3.0.0: - version "3.0.2" - resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.2.tgz#8b7e3bd114b59b51786f8bade0f39ddc80275a97" - integrity sha1-i3470RS1m1F4b4ut4POd3IAnWpc= - dependencies: - lru-cache "^5.1.1" - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha1-ObDhat2bYFvwqe89nar0hDtMrNI= - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha1-5IIb7vWyFCogJr1zkm/lN2McVAU= - dependencies: - agent-base "4" - debug "3.1.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz?cache=0&sync_timestamp=1576013709899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha1-TuenN6vZJniik9mzShr00NCMeHs= - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-3.0.1.tgz?cache=0&sync_timestamp=1576013709899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha1-uMKGQz6HYCMRsByOo0QT2Fakr4E= - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -husky@^2.3.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05" - integrity sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg== - dependencies: - cosmiconfig "^5.2.0" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^7.0.0" - is-ci "^2.0.0" - pkg-dir "^4.1.0" - please-upgrade-node "^3.1.1" - read-pkg "^5.1.1" - run-node "^1.0.0" - slash "^3.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -iferr@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/iferr/download/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" - integrity sha1-6f3kmp2gbcSkGUxsntbQgwUDem0= - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1565775199290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= - -ignore@^5.1.1, ignore@^5.1.4: - version "5.1.4" - resolved "https://registry.npm.taobao.org/ignore/download/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" - integrity sha1-hLez2+ZFUrbvDsqZ9nQ9vsbZet8= - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha1-bTP6Hc7235MPrgA0RvM0Fa+QURg= - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-fresh@^3.1.0: - version "3.2.1" - resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz?cache=0&sync_timestamp=1573665028675&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY= - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/import-from/download/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha1-BVz+w4zVon2AV8pRN219O/CJGWY= - dependencies: - resolve-from "^5.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= - -inflight@^1.0.4, inflight@~1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.npm.taobao.org/init-package-json/download/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha1-Rf/i9hCoyhNPK9HbVjeyNQcPbL4= - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inquirer@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -inquirer@^7.0.0: - version "7.0.0" - resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" - integrity sha1-nisDLd532h2124BHWLj+o6lwUZo= - dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.2" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^4.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -into-stream@^5.0.0: - version "5.1.1" - resolved "https://registry.npm.taobao.org/into-stream/download/into-stream-5.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finto-stream%2Fdownload%2Finto-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" - integrity sha1-+aIKNIoR88E/rOInY/LQLhJ/Tbg= - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@1.1.5, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw= - dependencies: - ci-info "^1.5.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-cidr@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/is-cidr/download/is-cidr-3.1.0.tgz#72e233d8e1c4cd1d3f11713fcce3eba7b0e3476f" - integrity sha1-cuIz2OHEzR0/EXE/zOPrp7DjR28= - dependencies: - cidr-regex "^2.0.10" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz?cache=0&sync_timestamp=1573231918408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-installed-globally%2Fdownload%2Fis-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= - -is-obj@^1.0.0, is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha1-R7/F2htdUNZBEIBsGZNZSC51qSg= - dependencies: - isobject "^4.0.0" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha1-13hIi9CkZmo76KFIK58rqv7eqLQ= - -is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha1-venDJoDW+uBBKdasnZIc54FfeOM= - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/is-text-path/download/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - dependencies: - text-extensions "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/isobject/download/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha1-PxyRVec7GSAiqAgZus0DQ3EWl7A= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -issue-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/issue-parser/download/issue-parser-5.0.0.tgz#0e22a40bc275b6c7da6ddf4a9b979e8ca9faf0d4" - integrity sha1-DiKkC8J1tsfabd9Km5eejKn68NQ= - dependencies: - lodash.capitalize "^4.2.1" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.uniqby "^4.7.0" - -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" - source-map "^0.6.1" - -istanbul-reports@^2.1.1: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== - dependencies: - handlebars "^4.1.2" - -java-properties@^1.0.0: - version "1.0.2" - resolved "https://registry.npm.taobao.org/java-properties/download/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" - integrity sha1-zNH6c5B0OKW1w4mCJp0Odx/nghE= - -jest-changed-files@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b" - integrity sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug== - dependencies: - "@jest/types" "^24.8.0" - execa "^1.0.0" - throat "^4.0.0" - -jest-cli@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.8.0.tgz#b075ac914492ed114fa338ade7362a301693e989" - integrity sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA== - dependencies: - "@jest/core" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - exit "^0.1.2" - import-local "^2.0.0" - is-ci "^2.0.0" - jest-config "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^12.0.2" - -jest-config@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.8.0.tgz#77db3d265a6f726294687cbbccc36f8a76ee0f4f" - integrity sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.8.0" - "@jest/types" "^24.8.0" - babel-jest "^24.8.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^24.8.0" - jest-environment-node "^24.8.0" - jest-get-type "^24.8.0" - jest-jasmine2 "^24.8.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - micromatch "^3.1.10" - pretty-format "^24.8.0" - realpath-native "^1.1.0" - -jest-diff@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172" - integrity sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.3.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" - -jest-docblock@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" - integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== - dependencies: - detect-newline "^2.1.0" - -jest-each@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.8.0.tgz#a05fd2bf94ddc0b1da66c6d13ec2457f35e52775" - integrity sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA== - dependencies: - "@jest/types" "^24.8.0" - chalk "^2.0.1" - jest-get-type "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" - -jest-environment-jsdom@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz#300f6949a146cabe1c9357ad9e9ecf9f43f38857" - integrity sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" - jsdom "^11.5.1" - -jest-environment-node@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.8.0.tgz#d3f726ba8bc53087a60e7a84ca08883a4c892231" - integrity sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" - -jest-get-type@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc" - integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ== - -jest-haste-map@^24.8.0: - version "24.8.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.1.tgz#f39cc1d2b1d907e014165b4bd5a957afcb992982" - integrity sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g== - dependencies: - "@jest/types" "^24.8.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.4.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" - -jest-jasmine2@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz#a9c7e14c83dd77d8b15e820549ce8987cc8cd898" - integrity sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^24.8.0" - is-generator-fn "^2.0.0" - jest-each "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" - throat "^4.0.0" - -jest-leak-detector@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz#c0086384e1f650c2d8348095df769f29b48e6980" - integrity sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g== - dependencies: - pretty-format "^24.8.0" - -jest-matcher-utils@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495" - integrity sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw== - dependencies: - chalk "^2.0.1" - jest-diff "^24.8.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" - -jest-message-util@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b" - integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" - -jest-mock@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56" - integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A== - dependencies: - "@jest/types" "^24.8.0" - -jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== - -jest-regex-util@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" - integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== - -jest-resolve-dependencies@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz#19eec3241f2045d3f990dba331d0d7526acff8e0" - integrity sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw== - dependencies: - "@jest/types" "^24.8.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.8.0" - -jest-resolve@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.8.0.tgz#84b8e5408c1f6a11539793e2b5feb1b6e722439f" - integrity sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw== - dependencies: - "@jest/types" "^24.8.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.8.0.tgz#4f9ae07b767db27b740d7deffad0cf67ccb4c5bb" - integrity sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - chalk "^2.4.2" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.8.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.8.0" - jest-jasmine2 "^24.8.0" - jest-leak-detector "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.8.0.tgz#05f94d5b05c21f6dc54e427cd2e4980923350620" - integrity sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.2" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^12.0.2" - -jest-serializer@^24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" - integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== - -jest-snapshot@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.8.0.tgz#3bec6a59da2ff7bc7d097a853fb67f9d415cb7c6" - integrity sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^24.8.0" - chalk "^2.0.1" - expect "^24.8.0" - jest-diff "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^24.8.0" - semver "^5.5.0" - -jest-util@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1" - integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA== - dependencies: - "@jest/console" "^24.7.1" - "@jest/fake-timers" "^24.8.0" - "@jest/source-map" "^24.3.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" - -jest-validate@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849" - integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA== - dependencies: - "@jest/types" "^24.8.0" - camelcase "^5.0.0" - chalk "^2.0.1" - jest-get-type "^24.8.0" - leven "^2.1.0" - pretty-format "^24.8.0" - -jest-watcher@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.8.0.tgz#58d49915ceddd2de85e238f6213cef1c93715de4" - integrity sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw== - dependencies: - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.9" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.8.0" - string-length "^2.0.0" - -jest-worker@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" - integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== - dependencies: - merge-stream "^1.0.1" - supports-color "^6.1.0" - -jest@^24.3.1: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.8.0.tgz#d5dff1984d0d1002196e9b7f12f75af1b2809081" - integrity sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg== - dependencies: - import-local "^2.0.0" - jest-cli "^24.8.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.11.0, js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsep@^0.3.0: - version "0.3.4" - resolved "https://registry.yarnpkg.com/jsep/-/jsep-0.3.4.tgz#55ebd4400c5c5861cb1ff949a7a4cd97fcaacaa0" - integrity sha512-ovGD9wE+wvudIIYxZGrRcZCxNyZ3Cl1N7Bzyp7/j4d/tA0BaUwcVM9bu0oZaSrefMiNwv6TwZ9X15gvZosteCQ== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -kleur@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/lazy-property/download/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -lcov-parse@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -libcipm@^4.0.7: - version "4.0.7" - resolved "https://registry.npm.taobao.org/libcipm/download/libcipm-4.0.7.tgz#76cd675c98bdaae64db88b782b01b804b6d02c8a" - integrity sha1-ds1nXJi9quZNuIt4KwG4BLbQLIo= - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.1" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - graceful-fs "^4.1.11" - ini "^1.3.5" - lock-verify "^2.0.2" - mkdirp "^0.5.1" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - pacote "^9.1.0" - read-package-json "^2.0.13" - rimraf "^2.6.2" - worker-farm "^1.6.0" - -libnpm@^3.0.1: - version "3.0.1" - resolved "https://registry.npm.taobao.org/libnpm/download/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" - integrity sha1-C+EbTJ3U0f/X2Vx4bpLlXWW+d6I= - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.3" - find-npm-prefix "^1.0.2" - libnpmaccess "^3.0.2" - libnpmconfig "^1.2.1" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmpublish "^1.1.2" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - lock-verify "^2.0.2" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - npm-profile "^4.0.2" - npm-registry-fetch "^4.0.0" - npmlog "^4.1.2" - pacote "^9.5.3" - read-package-json "^2.0.13" - stringify-package "^1.0.0" - -libnpmaccess@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/libnpmaccess/download/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" - integrity sha1-iy1yNFujvvkNO09pTt1cBBf1iSM= - dependencies: - aproba "^2.0.0" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" - -libnpmconfig@^1.2.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/libnpmconfig/download/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" - integrity sha1-wML3k6dOZ9SCXlA556AqAETfy8A= - dependencies: - figgy-pudding "^3.5.1" - find-up "^3.0.0" - ini "^1.3.5" - -libnpmhook@^5.0.3: - version "5.0.3" - resolved "https://registry.npm.taobao.org/libnpmhook/download/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" - integrity sha1-QCDA9e2/COvjlTJcql6gGIW5KPc= - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpmorg@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/libnpmorg/download/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" - integrity sha1-XSUD9s61fzPb3McY5mmP6m1a0Ic= - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpmpublish@^1.1.2: - version "1.1.3" - resolved "https://registry.npm.taobao.org/libnpmpublish/download/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" - integrity sha1-43gnlnItee7xoKIpRMEX4MTKQoA= - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" - semver "^5.5.1" - ssri "^6.0.1" - -libnpmsearch@^2.0.2: - version "2.0.2" - resolved "https://registry.npm.taobao.org/libnpmsearch/download/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" - integrity sha1-mk8FkQLTjj3UQIW9v+UJXypQRM8= - dependencies: - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpmteam@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/libnpmteam/download/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" - integrity sha1-i0i8u2znDdgVDJUPy9vz/rbuyCA= - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpx@^10.2.0: - version "10.2.0" - resolved "https://registry.npm.taobao.org/libnpx/download/libnpx-10.2.0.tgz#1bf4a1c9f36081f64935eb014041da10855e3102" - integrity sha1-G/ShyfNggfZJNesBQEHaEIVeMQI= - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^11.0.0" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lint-staged@^8.1.7: - version "8.2.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" - integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A== - dependencies: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.2.0" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - listr "^0.14.2" - listr-update-renderer "^0.5.0" - lodash "^4.17.11" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - yup "^0.27.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lock-verify@^2.0.2, lock-verify@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/lock-verify/download/lock-verify-2.1.0.tgz#fff4c918b8db9497af0c5fa7f6d71555de3ceb47" - integrity sha1-//TJGLjblJevDF+n9tcVVd4860c= - dependencies: - npm-package-arg "^6.1.0" - semver "^5.4.1" - -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/lockfile/download/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha1-B/gZ0lrkj4flOOZXi2lkpJgaVgk= - dependencies: - signal-exit "^3.0.2" - -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.npm.taobao.org/lodash._baseuniq/download/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.npm.taobao.org/lodash._createset/download/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= - -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.npm.taobao.org/lodash._root/download/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - -lodash.capitalize@^4.2.1: - version "4.2.1" - resolved "https://registry.npm.taobao.org/lodash.capitalize/download/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= - -lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: - version "4.5.0" - resolved "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.npm.taobao.org/lodash.escaperegexp/download/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.npm.taobao.org/lodash.ismatch/download/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.npm.taobao.org/lodash.set/download/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.npm.taobao.org/lodash.toarray/download/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= - -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.npm.taobao.org/lodash.unescape/download/lodash.unescape-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.unescape%2Fdownload%2Flodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.npm.taobao.org/lodash.union/download/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: - version "4.5.0" - resolved "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.npm.taobao.org/lodash.uniqby/download/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= - -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= - -lodash@4.17.15, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lodash@^4.17.11: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== - -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -longest@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" - integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= - dependencies: - yallist "^3.0.2" - -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.npm.taobao.org/macos-release/download/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha1-6xkwsDbAgArevM1fF7xMEt6Ltx8= - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-error@1.x: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== - -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1573744901330&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha1-qoOHEE8mh+3KAchofuRQE9AtGb0= - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -marked-terminal@^3.2.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/marked-terminal/download/marked-terminal-3.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarked-terminal%2Fdownload%2Fmarked-terminal-3.3.0.tgz#25ce0c0299285998c7636beaefc87055341ba1bd" - integrity sha1-Jc4MApkoWZjHY2vq78hwVTQbob0= - dependencies: - ansi-escapes "^3.1.0" - cardinal "^2.1.1" - chalk "^2.4.1" - cli-table "^0.3.1" - node-emoji "^1.4.1" - supports-hyperlinks "^1.0.1" - -marked@^0.7.0: - version "0.7.0" - resolved "https://registry.npm.taobao.org/marked/download/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" - integrity sha1-tkIB8FHScbHtwQoE0a6bdLuOXA4= - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== - dependencies: - escape-string-regexp "^1.0.4" - -meant@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/meant/download/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" - integrity sha1-ZgRP6i8jIw7IBvtRXv6inETSEV0= - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/meow/download/meow-5.0.0.tgz?cache=0&sync_timestamp=1575730464003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ= - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= - -merge2@^1.2.3, merge2@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - integrity sha1-WzZu6DsvFYLEj4fkfPGpNSEDyoE= - -merge@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk= - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime@^2.4.3: - version "2.4.4" - resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha1-vXuRE1/GsBzePpuuM9ZZtj2IV+U= - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0, mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.npm.taobao.org/minimist-options/download/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ= - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1, minipass@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^2.8.6: - version "2.9.0" - resolved "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz?cache=0&sync_timestamp=1571953917221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY= - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/modify-values/download/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha1-s5OfpgVUZHTj4+PGPWS9Q7TuYCI= - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -mri@^1.1.4: - version "1.1.4" - resolved "https://registry.npm.taobao.org/mri/download/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha1-fLHdG5tAkF8frAU6viW2cg9EdEo= - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.0.0, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -multimatch@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/multimatch/download/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" - integrity sha1-jDwPbj6ESa2grz3SnvtJGjdRkbM= - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= - -nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -nerf-dart@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/nerf-dart/download/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" - integrity sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-emoji@^1.4.1: - version "1.10.0" - resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= - dependencies: - lodash.toarray "^4.4.0" - -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c= - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@^2.3.0: - version "2.6.0" - resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha1-5jNFY4bUqlWGP2dqerDaqP3ssP0= - -node-gyp@^5.0.2, node-gyp@^5.0.5: - version "5.0.5" - resolved "https://registry.npm.taobao.org/node-gyp/download/node-gyp-5.0.5.tgz?cache=0&sync_timestamp=1572603536473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-5.0.5.tgz#f6cf1da246eb8c42b097d7cd4d6c3ce23a4163af" - integrity sha1-9s8dokbrjEKwl9fNTWw84jpBY68= - dependencies: - env-paths "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^4.4.12" - which "1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^5.2.1: - version "5.4.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" - integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -nopt@^4.0.1, nopt@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-url@^4.0.0: - version "4.5.0" - resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha1-RTNUCH5sqWlXvY9br3U/WYIUISk= - -npm-audit-report@^1.3.2: - version "1.3.2" - resolved "https://registry.npm.taobao.org/npm-audit-report/download/npm-audit-report-1.3.2.tgz#303bc78cd9e4c226415076a4f7e528c89fc77018" - integrity sha1-MDvHjNnkwiZBUHak9+UoyJ/HcBg= - dependencies: - cli-table3 "^0.5.0" - console-control-strings "^1.1.0" - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/npm-cache-filename/download/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= - -npm-install-checks@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/npm-install-checks/download/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" - integrity sha1-qy4yrSe6pGcgcGkI5bFMGFLeRNk= - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: - version "3.1.4" - resolved "https://registry.npm.taobao.org/npm-lifecycle/download/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha1-3ml1x9jfZfUVDbEQtXzOSYsLYEw= - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-logical-tree@^1.2.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/npm-logical-tree/download/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" - integrity sha1-RGEBQcokZkytNdHmBxdhk/2PW4g= - -npm-normalize-package-bin@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI= - -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: - version "6.1.1" - resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz?cache=0&sync_timestamp=1573444510217&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-package-arg%2Fdownload%2Fnpm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc= - dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.1.12, npm-packlist@^1.4.7: - version "1.4.7" - resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" - integrity sha1-npVDZaBrgLGBEeqQCUWvT4jtSEg= - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c= - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-profile@^4.0.2: - version "4.0.2" - resolved "https://registry.npm.taobao.org/npm-profile/download/npm-profile-4.0.2.tgz#8272a71c19634d0dce9c35a5daf8ee589cbb0f52" - integrity sha1-gnKnHBljTQ3OnDWl2vjuWJy7D1I= - dependencies: - aproba "^1.1.2 || 2" - figgy-pudding "^3.4.1" - npm-registry-fetch "^4.0.0" - -npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.2: - version "4.0.2" - resolved "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.2.tgz?cache=0&sync_timestamp=1573444860060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-registry-fetch%2Fdownload%2Fnpm-registry-fetch-4.0.2.tgz#2b1434f93ccbe6b6385f8e45f45db93e16921d7a" - integrity sha1-KxQ0+TzL5rY4X45F9F25PhaSHXo= - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.2.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" - integrity sha1-f5G+MX9qRm7+08nymArYpO6LD6U= - dependencies: - path-key "^3.0.0" - -npm-run-path@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.0.tgz?cache=0&sync_timestamp=1571055877165&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.0.tgz#d644ec1bd0569187d2a52909971023a0a58e8438" - integrity sha1-1kTsG9BWkYfSpSkJlxAjoKWOhDg= - dependencies: - path-key "^3.0.0" - -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/npm-user-validate/download/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -npm@^6.10.3: - version "6.13.4" - resolved "https://registry.npm.taobao.org/npm/download/npm-6.13.4.tgz?cache=0&sync_timestamp=1576091371724&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm%2Fdownload%2Fnpm-6.13.4.tgz#1e95b0f311999cf682384c38865dfeb3127203bb" - integrity sha1-HpWw8xGZnPaCOEw4hl3+sxJyA7s= - dependencies: - JSONStream "^1.3.5" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - aproba "^2.0.0" - archy "~1.0.0" - bin-links "^1.1.6" - bluebird "^3.5.5" - byte-size "^5.0.1" - cacache "^12.0.3" - call-limit "^1.1.1" - chownr "^1.1.3" - ci-info "^2.0.0" - cli-columns "^3.1.2" - cli-table3 "^0.5.1" - cmd-shim "^3.0.3" - columnify "~1.5.4" - config-chain "^1.1.12" - detect-indent "~5.0.0" - detect-newline "^2.1.0" - dezalgo "~1.0.3" - editor "~1.0.0" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.3.0" - glob "^7.1.4" - graceful-fs "^4.2.3" - has-unicode "~2.0.1" - hosted-git-info "^2.8.5" - iferr "^1.0.2" - infer-owner "^1.0.4" - inflight "~1.0.6" - inherits "^2.0.4" - ini "^1.3.5" - init-package-json "^1.10.3" - is-cidr "^3.0.0" - json-parse-better-errors "^1.0.2" - lazy-property "~1.0.0" - libcipm "^4.0.7" - libnpm "^3.0.1" - libnpmaccess "^3.0.2" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - libnpx "^10.2.0" - lock-verify "^2.1.0" - lockfile "^1.0.4" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "^5.1.1" - meant "~1.0.1" - mississippi "^3.0.0" - mkdirp "~0.5.1" - move-concurrently "^1.0.1" - node-gyp "^5.0.5" - nopt "~4.0.1" - normalize-package-data "^2.5.0" - npm-audit-report "^1.3.2" - npm-cache-filename "~1.0.2" - npm-install-checks "^3.0.2" - npm-lifecycle "^3.1.4" - npm-package-arg "^6.1.1" - npm-packlist "^1.4.7" - npm-pick-manifest "^3.0.2" - npm-profile "^4.0.2" - npm-registry-fetch "^4.0.2" - npm-user-validate "~1.0.0" - npmlog "~4.1.2" - once "~1.4.0" - opener "^1.5.1" - osenv "^0.1.5" - pacote "^9.5.11" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" - qrcode-terminal "^0.12.0" - query-string "^6.8.2" - qw "~1.0.1" - read "~1.0.7" - read-cmd-shim "^1.0.5" - read-installed "~4.0.3" - read-package-json "^2.1.1" - read-package-tree "^5.3.1" - readable-stream "^3.4.0" - readdir-scoped-modules "^1.1.0" - request "^2.88.0" - retry "^0.12.0" - rimraf "^2.6.3" - safe-buffer "^5.1.2" - semver "^5.7.1" - sha "^3.0.0" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "^6.0.1" - stringify-package "^1.0.1" - tar "^4.4.13" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "^1.1.1" - unpipe "~1.0.0" - update-notifier "^2.5.0" - uuid "^3.3.3" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "~3.0.0" - which "^1.3.1" - worker-farm "^1.7.0" - write-file-atomic "^2.4.3" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2, npmlog@~4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.0.7: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" - integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/octokit-pagination-methods/download/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha1-z0cu3J1VEFX573P25CtNu0yAvqQ= - -once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha1-//DzyRYX/mK7UBiWNumayKbfe+U= - dependencies: - mimic-fn "^2.1.0" - -opener@^1.5.1: - version "1.5.1" - resolved "https://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0= - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^3.0.0, os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/os-name/download/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha1-3sGdlmKW4c1i1wGlpm7h3ernCAE= - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4, osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" - -p-filter@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/p-filter/download/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" - integrity sha1-GxRyVirnoPdC8PPT03GOpm/5wJw= - dependencies: - p-map "^2.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-is-promise@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" - integrity sha1-WOeMff4uFjzyoE/4aefB26ZKWXE= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.0.0, p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - -p-reduce@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha1-CUCNpJUHxsJ0+qMfKN8zS8cStko= - -p-retry@^4.0.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/p-retry/download/p-retry-4.2.0.tgz#ea9066c6b44f23cab4cd42f6147cdbbc6604da5d" - integrity sha1-6pBmxrRPI8q0zUL2FHzbvGYE2l0= - dependencies: - "@types/retry" "^0.12.0" - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pacote@^9.1.0, pacote@^9.5.11, pacote@^9.5.3: - version "9.5.11" - resolved "https://registry.npm.taobao.org/pacote/download/pacote-9.5.11.tgz#524152077cb392c47b1fbe198aa28f778bef7ee1" - integrity sha1-UkFSB3yzksR7H74ZiqKPd4vvfuE= - dependencies: - bluebird "^3.5.3" - cacache "^12.0.2" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.3" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-normalize-package-bin "^1.0.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.12" - npm-pick-manifest "^3.0.0" - npm-registry-fetch "^4.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.2" - safe-buffer "^5.1.2" - semver "^5.6.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparallel-transform%2Fdownload%2Fparallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= - dependencies: - callsites "^3.0.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha1-c+URTJhtFD76NxLU6iTbmkJm9g8= - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - lines-and-columns "^1.1.6" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/path-key/download/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" - integrity sha1-maENhwqAO91e5vBHDljfzS+aVNM= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.5: - version "2.1.1" - resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" - integrity sha1-7N++p3BK21/m+0f5hmxMDhXpBcU= - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/pkg-conf/download/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= - dependencies: - find-up "^2.0.0" - load-json-file "^4.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== - dependencies: - semver-compare "^1.0.0" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s= - dependencies: - fast-diff "^1.1.2" - -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha1-99f1/4qc2HKnvkyhQglZVqYHl8s= - -pretty-format@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2" - integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw== - dependencies: - "@jest/types" "^24.8.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - -pretty-quick@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/pretty-quick/download/pretty-quick-2.0.1.tgz#417ee605ade98ecc686e72f63b5d28a2c35b43e9" - integrity sha1-QX7mBa3pjsxobnL2O10oosNbQ+k= - dependencies: - chalk "^2.4.2" - execa "^2.1.0" - find-up "^4.1.0" - ignore "^5.1.4" - mri "^1.1.4" - multimatch "^4.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= - -promise-inflight@^1.0.1, promise-inflight@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - -prompts@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db" - integrity sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg== - dependencies: - kleur "^3.0.2" - sisteransi "^1.0.0" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.npm.taobao.org/promzard/download/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" - -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/protoduck/download/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8= - dependencies: - genfun "^5.0.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24, psl@^1.1.28: - version "1.2.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" - integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz?cache=0&sync_timestamp=1569938104994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpumpify%2Fdownload%2Fpumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.npm.taobao.org/qrcode-terminal/download/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha1-u1tpnvf58FBQkqN0i+RGT+cbWBk= - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^6.8.2: - version "6.9.0" - resolved "https://registry.npm.taobao.org/query-string/download/query-string-6.9.0.tgz#1c3b727c370cf00f177c99f328fda2108f8fa3dd" - integrity sha1-HDtyfDcM8A8XfJnzKP2iEI+Po90= - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/qw/download/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= - -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-is@^16.8.4: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== - -read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: - version "1.0.5" - resolved "https://registry.npm.taobao.org/read-cmd-shim/download/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha1-h+Q+ulAJi6WjLQzrWDq45DuWHBY= - dependencies: - graceful-fs "^4.1.2" - -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.npm.taobao.org/read-installed/download/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= - dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: - version "2.1.1" - resolved "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" - integrity sha1-FqpmxZ59Ta1iiPF53ZKV/Vm7mPE= - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - npm-normalize-package-bin "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.3.1: - version "5.3.1" - resolved "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY= - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.0.0, read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w= - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read-pkg@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" - integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^4.0.0" - type-fest "^0.4.1" - -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.npm.taobao.org/read/download/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -"readable-stream@2 || 3", readable-stream@^3.4.0: - version "3.4.0" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha1-pRwmdUZY4KPCHb9ZFjvUW6b0R/w= - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.1.10: - version "1.1.14" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha1-jUVAe0+HCg3K68DihnDRjnRRQwk= - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== - dependencies: - util.promisify "^1.0.0" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/redent/download/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.npm.taobao.org/redeyed/download/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= - dependencies: - esprima "~4.0.0" - -regenerator-runtime@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" - integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8= - -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha1-10RoFUM/XV7WQxzV3KIQSPZrOX4= - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-auth-token@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" - integrity sha1-MOVZYe7Hc3naVR6lxM9Dy/A1Ir4= - dependencies: - rc "^1.2.8" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== - dependencies: - lodash "^4.17.11" - -request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== - dependencies: - request-promise-core "1.1.2" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.86.0, request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= - -resolve-global@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" - integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== - dependencies: - global-dirs "^0.1.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.0: - version "1.0.4" - resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= - -rimraf@2, rimraf@^2.5.2: - version "2.7.1" - resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= - dependencies: - glob "^7.1.3" - -rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== - -run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk= - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.3.3: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== - dependencies: - tslib "^1.9.0" - -rxjs@^6.4.0: - version "6.5.3" - resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.3.tgz?cache=0&sync_timestamp=1568815682378&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha1-UQ4mMX9NuRp+sd532d2boKSJmjo= - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -semantic-release@^15.13.31: - version "15.13.31" - resolved "https://registry.npm.taobao.org/semantic-release/download/semantic-release-15.13.31.tgz#75560e61562b5b7aa3e66256fd3454683c6508a6" - integrity sha1-dVYOYVYrW3qj5mJW/TRUaDxlCKY= - dependencies: - "@semantic-release/commit-analyzer" "^6.1.0" - "@semantic-release/error" "^2.2.0" - "@semantic-release/github" "^5.1.0" - "@semantic-release/npm" "^5.0.5" - "@semantic-release/release-notes-generator" "^7.1.2" - aggregate-error "^3.0.0" - cosmiconfig "^6.0.0" - debug "^4.0.0" - env-ci "^4.0.0" - execa "^3.2.0" - figures "^3.0.0" - find-versions "^3.0.0" - get-stream "^5.0.0" - git-log-parser "^1.2.0" - hook-std "^2.0.0" - hosted-git-info "^3.0.0" - lodash "^4.17.15" - marked "^0.7.0" - marked-terminal "^3.2.0" - p-locate "^4.0.0" - p-reduce "^2.0.0" - read-pkg-up "^7.0.0" - resolve-from "^5.0.0" - semver "^6.0.0" - signale "^1.2.1" - yargs "^15.0.1" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz?cache=0&sync_timestamp=1571064474000&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver-diff%2Fdownload%2Fsemver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -semver-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" - integrity sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg= - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -"semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.5.1, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= - -semver@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" - integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== - -semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -sha@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/sha/download/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" - integrity sha1-svL5CvaQwWo6g5pqbGgOpR/t0a4= - dependencies: - graceful-fs "^4.1.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -signale@^1.2.1: - version "1.4.0" - resolved "https://registry.npm.taobao.org/signale/download/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha1-xL5YMC+wJirAD8PYhqfBE3WQQvE= - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.0" - -simple-git@^1.85.0: - version "1.118.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.118.0.tgz#6e31d50672c58abdbdb0410fadfdb1db29bd71bd" - integrity sha512-0CaCfxdR7ula3EuOkrVFKBiqt7LcvMPfXgIdUhSwjC4A+OaO8yEPGjdO/kWY7ew9uYP9KEoH+dvslOOm7eVzkA== - dependencies: - debug "^4.0.1" - -sisteransi@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.2.tgz#ec57d64b6f25c4f26c0e2c7dd23f2d7f12f7e418" - integrity sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY= - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.npm.taobao.org/slide/download/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha1-kWBcJdkWUvRmHqacz0XxszHKIbo= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y= - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz?cache=0&sync_timestamp=1573090532880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM= - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/sorted-object/download/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.npm.taobao.org/sorted-union-stream/download/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-error-forwarder@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/spawn-error-forwarder/download/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" - integrity sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" - integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/split-on-first/download/split-on-first-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit-on-first%2Fdownload%2Fsplit-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha1-9hCv7uOxK84dDDBCXnY5i3gkml8= - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/split2/download/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha1-GGsldbz4PoW30YRldWI47k7kJJM= - dependencies: - through2 "^2.0.2" - -split2@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/split2/download/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" - integrity sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= - dependencies: - through2 "~2.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/split/download/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k= - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz?cache=0&sync_timestamp=1571961736774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg= - dependencies: - figgy-pudding "^3.5.1" - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-combiner2@~1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/stream-combiner2/download/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/stream-iterate/download/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" - integrity sha1-uoRtHaqXw8WWFVMIBj4HXtHJmv8= - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^5.2.0" - -string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU= - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -stringify-package@^1.0.0, stringify-package@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/stringify-package/download/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" - integrity sha1-5ao2Q+f3TQ8oYoty89rVzs/DuoU= - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= - dependencies: - ansi-regex "^5.0.0" - -strip-bom@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@3.0.1, strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.0.0, supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha1-cdrt82zBBgrFEAw1G7PaSMKcDvc= - dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -synchronous-promise@^2.0.6: - version "2.0.9" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.9.tgz#b83db98e9e7ae826bf9c8261fd8ac859126c780a" - integrity sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg== - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha1-EpLRlQDOP4YFOwXw6Ofko7shB54= - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: - version "4.4.13" - resolved "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz?cache=0&sync_timestamp=1570286254496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU= - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/temp-dir/download/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -tempy@^0.3.0: - version "0.3.0" - resolved "https://registry.npm.taobao.org/tempy/download/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" - integrity sha1-b2xbKVaVoWEwmWrVqwGovXJui/g= - dependencies: - temp-dir "^1.0.0" - type-fest "^0.3.1" - unique-string "^1.0.0" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY= - -text-table@^0.2.0, text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^3.0.0: - version "3.0.1" - resolved "https://registry.npm.taobao.org/through2/download/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" - integrity sha1-OSducTwzAu3544jdnIEt07glvVo= - dependencies: - readable-stream "2 || 3" - -through@2, "through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/tiny-relative-date/download/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha1-+giq1QHtcw8xzAQxgdmVw5qTXgc= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= - -tough-cookie@^2.3.3, tough-cookie@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -traverse@~0.6.6: - version "0.6.6" - resolved "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-off-newlines@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/trim-off-newlines/download/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -ts-jest@^24.0.0: - version "24.0.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" - integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "10.x" - -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tslint@^5.11.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" - integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha1-7XGZF/EcoN7lhicrKsSeAVot11k= - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.3.1: - version "0.3.1" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha1-Y9ANIE4FlHT+Xht8ARESu9HcKeE= - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.5.2: - version "0.5.2" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" - integrity sha1-1u9CoDVsbNRfSUhcO2KB/BSOSKI= - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^3.7.2: - version "3.7.2" - resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.7.2.tgz?cache=0&sync_timestamp=1572971428838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" - integrity sha1-J+SJuV+lkJRF6f717kjYFpetGPs= - -uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== - dependencies: - commander "~2.20.0" - source-map "~0.6.1" - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/umask/download/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= - dependencies: - imurmurhash "^0.1.4" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -universal-user-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/universal-user-agent/download/universal-user-agent-4.0.0.tgz#27da2ec87e32769619f68a14996465ea1cb9df16" - integrity sha1-J9ouyH4ydpYZ9ooUmWRl6hy53xY= - dependencies: - os-name "^3.1.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -update-notifier@^2.3.0, update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-join@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/url-join/download/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha1-tkLiGiZGgI/6F4xMX9o5hE4Szec= - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.npm.taobao.org/util-extend/download/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= - -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/util-promisify/download/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - -util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uuid@^3.3.3: - version "3.3.3" - resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY= - -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha1-4U3jezGm0ZT1aQ1n78Tn9vxqsw4= - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= - dependencies: - browser-process-hrtime "^0.1.2" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/which/download/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4" - integrity sha1-8c+U0HqOVxtv8AauuR0DAMR+8KQ= - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w= - dependencies: - string-width "^2.1.1" - -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.npm.taobao.org/windows-release/download/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha1-gSLa1a/DA9gzQiOAaAp5zfqReF8= - dependencies: - execa "^1.0.0" - -word-wrap@^1.0.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -worker-farm@^1.6.0, worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1573488536792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM= - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: - version "2.4.3" - resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE= - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz?cache=0&sync_timestamp=1567579932525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite%2Fdownload%2Fwrite-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM= - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= - -yaml@^1.7.2: - version "1.7.2" - resolved "https://registry.npm.taobao.org/yaml/download/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" - integrity sha1-8mqr9zhZCrYe+spQI1jkjcnzSLI= - dependencies: - "@babel/runtime" "^7.6.3" - -yargs-parser@10.x, yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^16.1.0: - version "16.1.0" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" - integrity sha1-c3R9U64YfnuNvjM/lXFMduoA7PE= - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.1.1" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" - integrity sha1-UFLv40RqTfXtZpyZWIbMDxNwJ2Y= - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - -yargs@^12.0.2: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@^15.0.1: - version "15.0.2" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-15.0.2.tgz#4248bf218ef050385c4f7e14ebdf425653d13bd3" - integrity sha1-Qki/IY7wUDhcT34U699CVlPRO9M= - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^16.1.0" - -yup@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" From c853fa1fe19687e260d10f4a488b1bb020b04825 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 5 Aug 2020 00:44:31 +0800 Subject: [PATCH 377/497] chore(release): 5.0.7 [skip ci] (#176) Signed-off-by: Zixuan Liu --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ff091a5e..02258664 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.6", + "version": "5.0.7", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 7b7756241c43af14fdd740e088bcf9651d156b61 Mon Sep 17 00:00:00 2001 From: Zihui Liu Date: Thu, 6 Aug 2020 14:55:01 +0800 Subject: [PATCH 378/497] test(rbacapi): fix incorrect description for testing getImplicitUsersForPermission (#173) Signed-off-by: kingiw --- test/rbacAPI.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index f04735af..ee38c83e 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -159,7 +159,7 @@ test('test deleteUser', async () => { expect(await e.getImplicitPermissionsForUser('bob')).toEqual([]); }); -test('test getImplicitPermissionsForUser', async () => { +test('test getImplicitUsersForPermission', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitUsersForPermission('data1', 'read')).toEqual(['alice']); expect(await e.getImplicitUsersForPermission('data1', 'write')).toEqual(['alice']); From aa7271de847fdb5ff5b97f44ce0a00ca056d7f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9D=89?= Date: Sat, 8 Aug 2020 22:33:19 +0800 Subject: [PATCH 379/497] chore: remove unused import (#178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 木杉 --- src/config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/config.ts b/src/config.ts index ad8c7ecf..cf47d3f1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. import { readFileSync } from 'fs'; -import { removeComments } from './util'; // ConfigInterface defines the behavior of a Config implementation export interface ConfigInterface { From 30ae126b962df6fc580ce943f20e8bf0ce5349c3 Mon Sep 17 00:00:00 2001 From: kingiw Date: Tue, 11 Aug 2020 11:40:28 +0800 Subject: [PATCH 380/497] feat: add casbinJsGetPermissionForUser Signed-off-by: kingiw --- src/frontend.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/index.ts | 1 + test/frontend.test.ts | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 src/frontend.ts create mode 100644 test/frontend.test.ts diff --git a/src/frontend.ts b/src/frontend.ts new file mode 100644 index 00000000..e148f41b --- /dev/null +++ b/src/frontend.ts @@ -0,0 +1,38 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Enforcer } from './enforcer'; + +/** + * getPermissionForCasbinJs returns a string describing the permission of a given user. + * You can pass the returned string to the frontend and manage your webpage widgets and APIs with Casbin.js. + * The returned permission depends on `getImplicitPermissionsForUser`. + * In other words, getPermissionForCasbinJs will load all of the explicit and implicit permission (role's permission). + * @param e the initialized enforcer + * @param user the user + */ +export async function casbinJsGetPermissionForUser(e: Enforcer, user: string): Promise { + const policies = await e.getImplicitPermissionsForUser(user); + const permission: { [key: string]: string[] } = {}; + policies.forEach(policy => { + if (!(policy[2] in permission)) { + permission[policy[2]] = []; + } + if (permission[policy[2]].indexOf(policy[1]) == -1) { + permission[policy[2]].push(policy[1]); + } + }); + const permString = JSON.stringify(permission); + return permString; +} diff --git a/src/index.ts b/src/index.ts index e451f21f..12ffde90 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,4 +23,5 @@ export * from './model'; export * from './persist'; export * from './rbac'; export * from './log'; +export * from './frontend'; export { Util }; diff --git a/test/frontend.test.ts b/test/frontend.test.ts new file mode 100644 index 00000000..a9fcd725 --- /dev/null +++ b/test/frontend.test.ts @@ -0,0 +1,33 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { newEnforcer } from '../src/index'; +import { casbinJsGetPermissionForUser } from '../src/frontend'; + +test('TestCasbinJsGetPermissionForUser', async () => { + const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + let permStr = await casbinJsGetPermissionForUser(e, 'alice'); + let perm = JSON.parse(permStr); + expect(perm['read']).toContain('data1'); + expect(perm['write']).toContain('data1'); + expect(perm['read']).toContain('data2'); + expect(perm['write']).toContain('data2'); + + permStr = await casbinJsGetPermissionForUser(e, 'bob'); + perm = JSON.parse(permStr); + expect(perm['write']).toContain('data2'); + expect(perm['write']).not.toContain('data1'); + expect(perm['read']).not.toBeNull; + expect(perm['rm_rf']).toBeNull; +}); From 25f8d58e256ad86dd73fd1fd66f4d59994c0582b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 11 Aug 2020 04:06:37 +0000 Subject: [PATCH 381/497] chore(release): 5.1.0 [skip ci] # [5.1.0](https://github.com/casbin/node-casbin/compare/v5.0.7...v5.1.0) (2020-08-11) ### Features * add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/node-casbin/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 767a037c..16049c2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.1.0](https://github.com/casbin/node-casbin/compare/v5.0.7...v5.1.0) (2020-08-11) + + +### Features + +* add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/node-casbin/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) + ## [5.0.6](https://github.com/casbin/node-casbin/compare/v5.0.5...v5.0.6) (2020-07-16) diff --git a/package.json b/package.json index 02258664..8e34a476 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.0.7", + "version": "5.1.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 6e144fb9a895332245006ef3a28c47d022654895 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 12 Aug 2020 01:42:41 +0800 Subject: [PATCH 382/497] fix: add checks fieldValues to remove filtered policy Signed-off-by: Zixuan Liu --- .gitignore | 1 + package-lock.json | 14382 ------------------------------------------- src/model/model.ts | 10 +- 3 files changed, 9 insertions(+), 14384 deletions(-) delete mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 4e18e7ca..15888299 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules lib yarn-error.log +package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index edea87fa..00000000 --- a/package-lock.json +++ /dev/null @@ -1,14382 +0,0 @@ -{ - "name": "casbin", - "version": "5.0.6", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/core": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.6", - "@babel/parser": "^7.9.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-module-transforms": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", - "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.6", - "@babel/types": "^7.9.0", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", - "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" - } - }, - "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", - "dev": true - }, - "@babel/helpers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", - "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", - "dev": true - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - } - } - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@commitlint/execute-rule": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-9.0.1.tgz", - "integrity": "sha512-fxnLadXs59qOBE9dInfQjQ4DmbGToQ0NjfqqmN6N8qS+KsCecO6N0mMUrC95et9xTeimFRr+0l9UMfmRVHNS/w==", - "dev": true, - "optional": true - }, - "@commitlint/load": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-9.0.1.tgz", - "integrity": "sha512-6ix/pUjVAggmDLTcnpyk0bgY3H9UBBTsEeFvTkHV+WQ6LNIxsQk8SwEOEZzWHUqt0pxqMQeiUgYeSZsSw2+uiw==", - "dev": true, - "optional": true, - "requires": { - "@commitlint/execute-rule": "^9.0.1", - "@commitlint/resolve-extends": "^9.0.1", - "@commitlint/types": "^9.0.1", - "chalk": "3.0.0", - "cosmiconfig": "^6.0.0", - "lodash": "^4.17.15", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "optional": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "optional": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "optional": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@commitlint/resolve-extends": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-9.0.1.tgz", - "integrity": "sha512-o6Lya2ILg1tEfWatS5x8w4ImvDzwb1whxsr2c/cxVCFqLF4hxHHHniZ0NJ+HFhYa1kBsYeKlD1qn9fHX5Y1+PQ==", - "dev": true, - "optional": true, - "requires": { - "import-fresh": "^3.0.0", - "lodash": "^4.17.15", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - } - }, - "@commitlint/types": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-9.0.1.tgz", - "integrity": "sha512-wo2rHprtDzTHf4tiSxavktJ52ntiwmg7eHNGFLH38G1of8OfGVwOc1sVbpM4jN/HK/rCMhYOi6xzoPqsv0537A==", - "dev": true, - "optional": true - }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@octokit/auth-token": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz", - "integrity": "sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.1.tgz", - "integrity": "sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A==", - "dev": true, - "requires": { - "@octokit/types": "^2.11.1", - "is-plain-object": "^3.0.0", - "universal-user-agent": "^5.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", - "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", - "dev": true, - "requires": { - "isobject": "^4.0.0" - } - }, - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true - }, - "universal-user-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz", - "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==", - "dev": true, - "requires": { - "os-name": "^3.1.0" - } - } - } - }, - "@octokit/plugin-paginate-rest": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz", - "integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.1" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz", - "integrity": "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==", - "dev": true - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz", - "integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.1", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.2.tgz", - "integrity": "sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw==", - "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.0.0", - "@octokit/types": "^2.11.1", - "deprecation": "^2.0.0", - "is-plain-object": "^3.0.0", - "node-fetch": "^2.3.0", - "once": "^1.4.0", - "universal-user-agent": "^5.0.0" - }, - "dependencies": { - "@octokit/request-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.0.tgz", - "integrity": "sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "is-plain-object": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", - "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", - "dev": true, - "requires": { - "isobject": "^4.0.0" - } - }, - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true - }, - "universal-user-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz", - "integrity": "sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==", - "dev": true, - "requires": { - "os-name": "^3.1.0" - } - } - } - }, - "@octokit/request-error": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", - "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", - "dev": true, - "requires": { - "@octokit/types": "^2.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "16.43.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.1.tgz", - "integrity": "sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw==", - "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.0", - "@octokit/plugin-paginate-rest": "^1.1.1", - "@octokit/plugin-request-log": "^1.0.0", - "@octokit/plugin-rest-endpoint-methods": "2.4.0", - "@octokit/request": "^5.2.0", - "@octokit/request-error": "^1.0.2", - "atob-lite": "^2.0.0", - "before-after-hook": "^2.0.0", - "btoa-lite": "^1.0.0", - "deprecation": "^2.0.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lodash.uniq": "^4.5.0", - "octokit-pagination-methods": "^1.1.0", - "once": "^1.4.0", - "universal-user-agent": "^4.0.0" - } - }, - "@octokit/types": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.12.2.tgz", - "integrity": "sha512-1GHLI/Jll3j6F0GbYyZPFTcHZMGjAiRfkTEoRUyaVVk2IWbDdwEiClAJvXzfXCDayuGSNCqAUH8lpjZtqW9GDw==", - "dev": true, - "requires": { - "@types/node": ">= 8" - } - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, - "@semantic-release/changelog": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-3.0.6.tgz", - "integrity": "sha512-9TqPL/VarLLj6WkUqbIqFiY3nwPmLuKFHy9fe/LamAW5s4MEW/ig9zW9vzYGOUVtWdErGJ1J62E3Edkamh3xaQ==", - "dev": true, - "requires": { - "@semantic-release/error": "^2.1.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^8.0.0", - "lodash": "^4.17.4" - } - }, - "@semantic-release/commit-analyzer": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-6.3.3.tgz", - "integrity": "sha512-Pyv1ZL2u5AIOY4YbxFCAB5J1PEh5yON8ylbfiPiriDGGW6Uu1U3Y8lysMtWu+FUD5x7tSnyIzhqx0+fxPxqbgw==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.0.7", - "debug": "^4.0.0", - "import-from": "^3.0.0", - "lodash": "^4.17.4" - } - }, - "@semantic-release/error": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", - "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", - "dev": true - }, - "@semantic-release/git": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-7.0.18.tgz", - "integrity": "sha512-VwnsGUXpNdvPcsq05BQyLBZxGUlEiJCMKNi8ttLvZZAhjI1mAp9dwypOeyxSJ5eFQ+iGMBLdoKF1LL0pmA/d0A==", - "dev": true, - "requires": { - "@semantic-release/error": "^2.1.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^3.2.0", - "fs-extra": "^8.0.0", - "globby": "^10.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - } - }, - "@semantic-release/github": { - "version": "5.5.8", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.5.8.tgz", - "integrity": "sha512-YxbBXbCThs/Xk3E4QU01AMIUM8eb0UTvjHJtclTDR3/DEW7kUpmXQqBMnSh3qCTuk4scRFIoaF0fGU/0xByZug==", - "dev": true, - "requires": { - "@octokit/rest": "^16.27.0", - "@semantic-release/error": "^2.2.0", - "aggregate-error": "^3.0.0", - "bottleneck": "^2.18.1", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "fs-extra": "^8.0.0", - "globby": "^10.0.0", - "http-proxy-agent": "^3.0.0", - "https-proxy-agent": "^4.0.0", - "issue-parser": "^5.0.0", - "lodash": "^4.17.4", - "mime": "^2.4.3", - "p-filter": "^2.0.0", - "p-retry": "^4.0.0", - "url-join": "^4.0.0" - } - }, - "@semantic-release/npm": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-5.3.5.tgz", - "integrity": "sha512-AOREQ6rUT8OAiqXvWCp0kMNjcdnLLq1JdP0voZL4l5zf6Tgs/65YA7ctP+9shthW01Ps85Nu0pILW3p9GkaYuw==", - "dev": true, - "requires": { - "@semantic-release/error": "^2.2.0", - "aggregate-error": "^3.0.0", - "execa": "^3.2.0", - "fs-extra": "^8.0.0", - "lodash": "^4.17.15", - "nerf-dart": "^1.0.0", - "normalize-url": "^4.0.0", - "npm": "^6.10.3", - "rc": "^1.2.8", - "read-pkg": "^5.0.0", - "registry-auth-token": "^4.0.0", - "tempy": "^0.3.0" - } - }, - "@semantic-release/release-notes-generator": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-7.3.5.tgz", - "integrity": "sha512-LGjgPBGjjmjap/76O0Md3wc04Y7IlLnzZceLsAkcYRwGQdRPTTFUJKqDQTuieWTs7zfHzQoZqsqPfFxEN+g2+Q==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-changelog-writer": "^4.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.0.0", - "debug": "^4.0.0", - "get-stream": "^5.0.0", - "import-from": "^3.0.0", - "into-stream": "^5.0.0", - "lodash": "^4.17.4", - "read-pkg-up": "^7.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - } - } - }, - "@types/babel__core": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", - "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz", - "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/braces": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", - "integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==", - "dev": true - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/ip": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/@types/ip/-/ip-0.0.31.tgz", - "integrity": "sha512-oYk8aalgfCt7XfEu66Sjwz/aQjfRtQkjNSXwrUGqyRoQbOymAc156fUNTwn1cSCEEwuPPzMy7fGPmKcFLoaIkA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "dev": true, - "requires": { - "jest-diff": "^24.3.0" - } - }, - "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.150", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz", - "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==", - "dev": true - }, - "@types/micromatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", - "integrity": "sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw==", - "dev": true, - "requires": { - "@types/braces": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "10.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", - "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "13.0.8", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz", - "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.30.0.tgz", - "integrity": "sha512-PGejii0qIZ9Q40RB2jIHyUpRWs1GJuHP1pkoCiaeicfwO9z7Fx03NQzupuyzAmv+q9/gFNHu7lo1ByMXe8PNyg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "2.30.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.30.0.tgz", - "integrity": "sha512-L3/tS9t+hAHksy8xuorhOzhdefN0ERPDWmR9CclsIGOUqGKy6tqc/P+SoXeJRye5gazkuPO0cK9MQRnolykzkA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.30.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.30.0.tgz", - "integrity": "sha512-9kDOxzp0K85UnpmPJqUzdWaCNorYYgk1yZmf4IKzpeTlSAclnFsrLjfwD9mQExctLoLoGAUXq1co+fbr+3HeFw==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.30.0", - "@typescript-eslint/typescript-estree": "2.30.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.30.0.tgz", - "integrity": "sha512-nI5WOechrA0qAhnr+DzqwmqHsx7Ulr/+0H7bWCcClDhhWkSyZR5BmTvnBEyONwJCTWHfc5PAQExX24VD26IAVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^6.3.0", - "tsutils": "^3.17.1" - } - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", - "dev": true - }, - "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", - "dev": true - }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", - "dev": true - }, - "await-lock": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.0.1.tgz", - "integrity": "sha512-ntLi9fzlMT/vWjC1wwVI11/cSRJ3nTS35qVekNc9WnaoMOP2eWH0RvIqwLQkDjX4a4YynsKEv+Ere2VONp9wxg==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before-after-hook": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", - "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cachedir": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", - "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, - "requires": { - "colors": "1.0.3" - } - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commitizen": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.1.2.tgz", - "integrity": "sha512-LBxTQKHbVgroMz9ohpm86N+GfJobonGyvDc3zBGdZazbwCLz2tqLa48Rf2TnAdKx7/06W1i1R3SXUt5QW97qVQ==", - "dev": true, - "requires": { - "cachedir": "2.2.0", - "cz-conventional-changelog": "3.2.0", - "dedent": "0.7.0", - "detect-indent": "6.0.0", - "find-node-modules": "2.0.0", - "find-root": "1.1.0", - "fs-extra": "8.1.0", - "glob": "7.1.4", - "inquirer": "6.5.0", - "is-utf8": "^0.2.1", - "lodash": "4.17.15", - "minimist": "1.2.5", - "strip-bom": "4.0.0", - "strip-json-comments": "3.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "compare-func": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz", - "integrity": "sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "conventional-changelog-writer": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz", - "integrity": "sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "conventional-commits-filter": "^2.0.2", - "dateformat": "^3.0.0", - "handlebars": "^4.4.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^5.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^3.0.0" - } - }, - "conventional-commit-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", - "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", - "dev": true - }, - "conventional-commits-filter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz", - "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz", - "integrity": "sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.1", - "lodash": "^4.17.15", - "meow": "^5.0.0", - "split2": "^2.0.0", - "through2": "^3.0.0", - "trim-off-newlines": "^1.0.0" - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "coveralls": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", - "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - } - }, - "cross-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", - "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cz-conventional-changelog": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz", - "integrity": "sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==", - "dev": true, - "requires": { - "@commitlint/load": ">6.1.1", - "chalk": "^2.4.1", - "commitizen": "^4.0.3", - "conventional-commit-types": "^3.0.0", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "word-wrap": "^1.0.3" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-ci": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-4.5.2.tgz", - "integrity": "sha512-lS+edpNp2+QXEPkx6raEMIjKxKKWnJ4+VWzovYJ2NLYiJAYenSAXotFfVdgaFxdbVnvAbUI8epQDa1u12ERxfQ==", - "dev": true, - "requires": { - "execa": "^3.2.0", - "java-properties": "^1.0.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", - "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-plugin-prettier": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", - "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - } - }, - "expression-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/expression-eval/-/expression-eval-2.1.0.tgz", - "integrity": "sha512-FUJO/Akvl/JOWkvlqZaqbkhsEWlCJWDeZG4tzX96UH68D9FeRgYgtb55C2qtqbORC0Q6x5419EDjWu4IT9kQfg==", - "requires": { - "jsep": "^0.3.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", - "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-node-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", - "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", - "dev": true, - "requires": { - "findup-sync": "^3.0.0", - "merge": "^1.2.1" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "g-status": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", - "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "matcher": "^1.0.0", - "simple-git": "^1.85.0" - } - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", - "dev": true, - "requires": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - }, - "dependencies": { - "split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", - "dev": true, - "requires": { - "through2": "~2.0.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "optional": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hook-std": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", - "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-proxy-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz", - "integrity": "sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-2.7.0.tgz", - "integrity": "sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg==", - "dev": true, - "requires": { - "cosmiconfig": "^5.2.0", - "execa": "^1.0.0", - "find-up": "^3.0.0", - "get-stdin": "^7.0.0", - "is-ci": "^2.0.0", - "pkg-dir": "^4.1.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^5.1.1", - "run-node": "^1.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } - }, - "into-stream": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz", - "integrity": "sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==", - "dev": true, - "requires": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "issue-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-5.0.0.tgz", - "integrity": "sha512-q/16W7EPHRL0FKVz9NU++TUsoygXGj6JOi88oulyAcQG+IEZ0T6teVdE+VLbe19OfL/tbV8Wi3Dfo0HedeHW0Q==", - "dev": true, - "requires": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - } - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "dev": true - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dev": true, - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - } - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "dev": true - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - } - } - }, - "jsep": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/jsep/-/jsep-0.3.4.tgz", - "integrity": "sha512-ovGD9wE+wvudIIYxZGrRcZCxNyZ3Cl1N7Bzyp7/j4d/tA0BaUwcVM9bu0oZaSrefMiNwv6TwZ9X15gvZosteCQ==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", - "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.2.0", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "del": "^3.0.0", - "execa": "^1.0.0", - "g-status": "^2.0.2", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "listr": "^0.14.2", - "listr-update-renderer": "^0.5.0", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.2", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2", - "yup": "^0.27.0" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "dev": true, - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", - "dev": true - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - } - } - } - }, - "longest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "macos-release": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", - "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", - "dev": true - }, - "marked-terminal": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz", - "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==", - "dev": true, - "requires": { - "ansi-escapes": "^3.1.0", - "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "cli-table": "^0.3.1", - "node-emoji": "^1.4.1", - "supports-hyperlinks": "^1.0.1" - } - }, - "matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.4" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "meow": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", - "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0", - "yargs-parser": "^10.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "mri": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz", - "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dev": true, - "requires": { - "lodash.toarray": "^4.4.0" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "npm": { - "version": "6.14.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.4.tgz", - "integrity": "sha512-B8UDDbWvdkW6RgXFn8/h2cHJP/u/FPa4HWeGzW23aNEBARN3QPrRaHqPIZW2NSN3fW649gtgUDNZpaRs0zTMPw==", - "dev": true, - "requires": { - "JSONStream": "^1.3.5", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "aproba": "^2.0.0", - "archy": "~1.0.0", - "bin-links": "^1.1.7", - "bluebird": "^3.5.5", - "byte-size": "^5.0.1", - "cacache": "^12.0.3", - "call-limit": "^1.1.1", - "chownr": "^1.1.4", - "ci-info": "^2.0.0", - "cli-columns": "^3.1.2", - "cli-table3": "^0.5.1", - "cmd-shim": "^3.0.3", - "columnify": "~1.5.4", - "config-chain": "^1.1.12", - "debuglog": "*", - "detect-indent": "~5.0.0", - "detect-newline": "^2.1.0", - "dezalgo": "~1.0.3", - "editor": "~1.0.0", - "figgy-pudding": "^3.5.1", - "find-npm-prefix": "^1.0.2", - "fs-vacuum": "~1.2.10", - "fs-write-stream-atomic": "~1.0.10", - "gentle-fs": "^2.3.0", - "glob": "^7.1.6", - "graceful-fs": "^4.2.3", - "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.8", - "iferr": "^1.0.2", - "imurmurhash": "*", - "infer-owner": "^1.0.4", - "inflight": "~1.0.6", - "inherits": "^2.0.4", - "ini": "^1.3.5", - "init-package-json": "^1.10.3", - "is-cidr": "^3.0.0", - "json-parse-better-errors": "^1.0.2", - "lazy-property": "~1.0.0", - "libcipm": "^4.0.7", - "libnpm": "^3.0.1", - "libnpmaccess": "^3.0.2", - "libnpmhook": "^5.0.3", - "libnpmorg": "^1.0.1", - "libnpmsearch": "^2.0.2", - "libnpmteam": "^1.0.2", - "libnpx": "^10.2.2", - "lock-verify": "^2.1.0", - "lockfile": "^1.0.4", - "lodash._baseindexof": "*", - "lodash._baseuniq": "~4.6.0", - "lodash._bindcallback": "*", - "lodash._cacheindexof": "*", - "lodash._createcache": "*", - "lodash._getnative": "*", - "lodash.clonedeep": "~4.5.0", - "lodash.restparam": "*", - "lodash.union": "~4.6.0", - "lodash.uniq": "~4.5.0", - "lodash.without": "~4.4.0", - "lru-cache": "^5.1.1", - "meant": "~1.0.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.4", - "move-concurrently": "^1.0.1", - "node-gyp": "^5.1.0", - "nopt": "~4.0.1", - "normalize-package-data": "^2.5.0", - "npm-audit-report": "^1.3.2", - "npm-cache-filename": "~1.0.2", - "npm-install-checks": "^3.0.2", - "npm-lifecycle": "^3.1.4", - "npm-package-arg": "^6.1.1", - "npm-packlist": "^1.4.8", - "npm-pick-manifest": "^3.0.2", - "npm-profile": "^4.0.4", - "npm-registry-fetch": "^4.0.3", - "npm-user-validate": "~1.0.0", - "npmlog": "~4.1.2", - "once": "~1.4.0", - "opener": "^1.5.1", - "osenv": "^0.1.5", - "pacote": "^9.5.12", - "path-is-inside": "~1.0.2", - "promise-inflight": "~1.0.1", - "qrcode-terminal": "^0.12.0", - "query-string": "^6.8.2", - "qw": "~1.0.1", - "read": "~1.0.7", - "read-cmd-shim": "^1.0.5", - "read-installed": "~4.0.3", - "read-package-json": "^2.1.1", - "read-package-tree": "^5.3.1", - "readable-stream": "^3.6.0", - "readdir-scoped-modules": "^1.1.0", - "request": "^2.88.0", - "retry": "^0.12.0", - "rimraf": "^2.7.1", - "safe-buffer": "^5.1.2", - "semver": "^5.7.1", - "sha": "^3.0.0", - "slide": "~1.1.6", - "sorted-object": "~2.0.1", - "sorted-union-stream": "~2.1.3", - "ssri": "^6.0.1", - "stringify-package": "^1.0.1", - "tar": "^4.4.13", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "uid-number": "0.0.6", - "umask": "~1.1.0", - "unique-filename": "^1.1.1", - "unpipe": "~1.0.0", - "update-notifier": "^2.5.0", - "uuid": "^3.3.3", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "~3.0.0", - "which": "^1.3.1", - "worker-farm": "^1.7.0", - "write-file-atomic": "^2.4.3" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "agent-base": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.5.2", - "bundled": true, - "dev": true, - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "5.5.2", - "bundled": true, - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-align": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "ansistyles": { - "version": "0.1.3", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "asap": { - "version": "2.0.6", - "bundled": true, - "dev": true - }, - "asn1": { - "version": "0.2.4", - "bundled": true, - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "bundled": true, - "dev": true - }, - "aws4": { - "version": "1.8.0", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-links": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "bluebird": "^3.5.3", - "cmd-shim": "^3.0.0", - "gentle-fs": "^2.3.0", - "graceful-fs": "^4.1.15", - "npm-normalize-package-bin": "^1.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "bluebird": { - "version": "3.5.5", - "bundled": true, - "dev": true - }, - "boxen": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "builtins": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "byline": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "byte-size": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "cacache": { - "version": "12.0.3", - "bundled": true, - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "call-limit": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "chalk": { - "version": "2.4.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cidr-regex": { - "version": "2.0.10", - "bundled": true, - "dev": true, - "requires": { - "ip-regex": "^2.1.0" - } - }, - "cli-boxes": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "cli-columns": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "cli-table3": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "cmd-shim": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "~0.5.0" - } - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "color-convert": { - "version": "1.9.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "colors": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true - }, - "columnify": { - "version": "1.5.4", - "bundled": true, - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "bundled": true, - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.12", - "bundled": true, - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true, - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "create-error-class": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "bundled": true, - "dev": true - } - } - }, - "crypto-random-string": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "bundled": true, - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "dezalgo": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "bundled": true, - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "duplexify": { - "version": "3.6.0", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "editor": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "err-code": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "errno": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "bundled": true, - "dev": true, - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "bundled": true, - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true, - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "figgy-pudding": { - "version": "3.5.1", - "bundled": true, - "dev": true - }, - "find-npm-prefix": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true - }, - "form-data": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "from2": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^2.6.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "fs-vacuum": { - "version": "1.2.10", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "path-is-inside": "^1.0.1", - "rimraf": "^2.5.2" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "iferr": { - "version": "0.1.5", - "bundled": true, - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "genfun": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "gentle-fs": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.1.2", - "chownr": "^1.1.2", - "cmd-shim": "^3.0.3", - "fs-vacuum": "^1.2.10", - "graceful-fs": "^4.1.11", - "iferr": "^0.1.5", - "infer-owner": "^1.0.4", - "mkdirp": "^0.5.1", - "path-is-inside": "^1.0.2", - "read-cmd-shim": "^1.0.1", - "slide": "^1.1.6" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true, - "dev": true - } - } - }, - "get-caller-file": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "bundled": true, - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true, - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.3", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "har-validator": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "bundled": true, - "dev": true - }, - "http-cache-semantics": { - "version": "3.8.1", - "bundled": true, - "dev": true - }, - "http-proxy-agent": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "http-signature": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "bundled": true, - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "iferr": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-lazy": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true - }, - "init-package-json": { - "version": "1.10.3", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ip": { - "version": "1.1.5", - "bundled": true, - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "ci-info": "^1.5.0" - }, - "dependencies": { - "ci-info": { - "version": "1.6.0", - "bundled": true, - "dev": true - } - } - }, - "is-cidr": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "cidr-regex": "^2.0.10" - } - }, - "is-date-object": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "bundled": true, - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true, - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "latest-version": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazy-property": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "libcipm": { - "version": "4.0.7", - "bundled": true, - "dev": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.5.1", - "find-npm-prefix": "^1.0.2", - "graceful-fs": "^4.1.11", - "ini": "^1.3.5", - "lock-verify": "^2.0.2", - "mkdirp": "^0.5.1", - "npm-lifecycle": "^3.0.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "pacote": "^9.1.0", - "read-package-json": "^2.0.13", - "rimraf": "^2.6.2", - "worker-farm": "^1.6.0" - } - }, - "libnpm": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.3", - "find-npm-prefix": "^1.0.2", - "libnpmaccess": "^3.0.2", - "libnpmconfig": "^1.2.1", - "libnpmhook": "^5.0.3", - "libnpmorg": "^1.0.1", - "libnpmpublish": "^1.1.2", - "libnpmsearch": "^2.0.2", - "libnpmteam": "^1.0.2", - "lock-verify": "^2.0.2", - "npm-lifecycle": "^3.0.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "npm-profile": "^4.0.2", - "npm-registry-fetch": "^4.0.0", - "npmlog": "^4.1.2", - "pacote": "^9.5.3", - "read-package-json": "^2.0.13", - "stringify-package": "^1.0.0" - } - }, - "libnpmaccess": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmconfig": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "bundled": true, - "dev": true - } - } - }, - "libnpmhook": { - "version": "5.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmorg": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmpublish": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "lodash.clonedeep": "^4.5.0", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^4.0.0", - "semver": "^5.5.1", - "ssri": "^6.0.1" - } - }, - "libnpmsearch": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmteam": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpx": { - "version": "10.2.2", - "bundled": true, - "dev": true, - "requires": { - "dotenv": "^5.0.1", - "npm-package-arg": "^6.0.0", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.0", - "update-notifier": "^2.3.0", - "which": "^1.3.0", - "y18n": "^4.0.0", - "yargs": "^11.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lock-verify": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^6.1.0", - "semver": "^5.4.1" - } - }, - "lockfile": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "signal-exit": "^3.0.2" - } - }, - "lodash._baseindexof": { - "version": "3.1.0", - "bundled": true, - "dev": true - }, - "lodash._baseuniq": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "requires": { - "lodash._createset": "~4.0.0", - "lodash._root": "~3.0.0" - } - }, - "lodash._bindcallback": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "lodash._cacheindexof": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "lodash._createcache": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0" - } - }, - "lodash._createset": { - "version": "4.0.3", - "bundled": true, - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "bundled": true, - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "bundled": true, - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "bundled": true, - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "bundled": true, - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "bundled": true, - "dev": true - }, - "lodash.without": { - "version": "4.4.0", - "bundled": true, - "dev": true - }, - "lowercase-keys": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "make-fetch-happen": { - "version": "5.0.2", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "meant": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "mem": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "bundled": true, - "dev": true - } - } - }, - "mime-db": { - "version": "1.35.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.19", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "~1.35.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "mississippi": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mkdirp": { - "version": "0.5.4", - "bundled": true, - "dev": true, - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true - } - } - }, - "move-concurrently": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "bundled": true, - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "node-fetch-npm": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-gyp": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "bundled": true, - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "npm-audit-report": { - "version": "1.3.2", - "bundled": true, - "dev": true, - "requires": { - "cli-table3": "^0.5.0", - "console-control-strings": "^1.1.0" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-cache-filename": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "npm-install-checks": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "semver": "^2.3.0 || 3.x || 4 || 5" - } - }, - "npm-lifecycle": { - "version": "3.1.4", - "bundled": true, - "dev": true, - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "npm-logical-tree": { - "version": "1.2.1", - "bundled": true, - "dev": true - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "npm-package-arg": { - "version": "6.1.1", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "npm-profile": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.1.2 || 2", - "figgy-pudding": "^3.4.1", - "npm-registry-fetch": "^4.0.0" - } - }, - "npm-registry-fetch": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "bundled": true, - "dev": true - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "object-keys": { - "version": "1.0.12", - "bundled": true, - "dev": true - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "bundled": true, - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "package-json": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "pacote": { - "version": "9.5.12", - "bundled": true, - "dev": true, - "requires": { - "bluebird": "^3.5.3", - "cacache": "^12.0.2", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-normalize-package-bin": "^1.0.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^3.0.0", - "npm-registry-fetch": "^4.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "parallel-transform": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "pify": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-retry": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - }, - "dependencies": { - "retry": { - "version": "0.10.1", - "bundled": true, - "dev": true - } - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "bundled": true, - "dev": true - }, - "protoduck": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "genfun": "^5.0.0" - } - }, - "prr": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "psl": { - "version": "1.1.29", - "bundled": true, - "dev": true - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "bundled": true, - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "qs": { - "version": "6.5.2", - "bundled": true, - "dev": true - }, - "query-string": { - "version": "6.8.2", - "bundled": true, - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "qw": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true - } - } - }, - "read": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-installed": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "graceful-fs": "^4.1.2", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "slide": "~1.1.3", - "util-extend": "^1.0.1" - } - }, - "read-package-json": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.3.1", - "bundled": true, - "dev": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "request": { - "version": "2.88.0", - "bundled": true, - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "retry": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-queue": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.1.1" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "sha": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slide": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "smart-buffer": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "socks": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "sorted-object": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "sorted-union-stream": { - "version": "2.1.3", - "bundled": true, - "dev": true, - "requires": { - "from2": "^1.3.0", - "stream-iterate": "^1.1.0" - }, - "dependencies": { - "from2": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~1.1.10" - } - }, - "isarray": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "bundled": true, - "dev": true - } - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "bundled": true, - "dev": true - }, - "split-on-first": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "sshpk": { - "version": "1.14.2", - "bundled": true, - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "bundled": true, - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stream-each": { - "version": "1.2.2", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-iterate": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-shift": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "strict-uri-encode": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "bundled": true, - "dev": true - } - } - }, - "stringify-package": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "term-size": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "through": { - "version": "2.3.8", - "bundled": true, - "dev": true - }, - "through2": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "timed-out": { - "version": "4.0.1", - "bundled": true, - "dev": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "bundled": true, - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "typedarray": { - "version": "0.0.6", - "bundled": true, - "dev": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true - }, - "umask": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "unzip-response": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "bundled": true, - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "util-extend": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "util-promisify": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "bundled": true, - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "xtend": { - "version": "4.0.1", - "bundled": true, - "dev": true - }, - "y18n": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - }, - "yargs": { - "version": "11.1.1", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "y18n": { - "version": "3.2.1", - "bundled": true, - "dev": true - } - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "octokit-pagination-methods": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", - "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "dev": true, - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - }, - "dependencies": { - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - } - } - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - }, - "p-retry": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.2.0.tgz", - "integrity": "sha512-jPH38/MRh263KKcq0wBNOGFJbm+U6784RilTmHjB/HM9kH9V8WlCpVUcdOmip9cjXOh6MxZ5yk1z2SjDUJfWmA==", - "dev": true, - "requires": { - "@types/retry": "^0.12.0", - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "pretty-quick": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-2.0.1.tgz", - "integrity": "sha512-y7bJt77XadjUr+P1uKqZxFWLddvj3SKY6EU4BuQtMxmmEFSMpbN132pUWdSG1g1mtUfO0noBvn7wBf0BVeomHg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "execa": "^2.1.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.4", - "multimatch": "^4.0.0" - }, - "dependencies": { - "execa": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", - "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, - "property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - }, - "dependencies": { - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - } - } - }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", - "dev": true, - "requires": { - "esprima": "~4.0.0" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "optional": true, - "requires": { - "global-dirs": "^0.1.1" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semantic-release": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.14.0.tgz", - "integrity": "sha512-Cn43W35AOLY0RMcDbtwhJODJmWg6YCs1+R5jRQsTmmkEGzkV4B2F/QXkjVZpl4UbH91r93GGH0xhoq9kh7I5PA==", - "dev": true, - "requires": { - "@semantic-release/commit-analyzer": "^6.1.0", - "@semantic-release/error": "^2.2.0", - "@semantic-release/github": "^5.1.0", - "@semantic-release/npm": "^5.0.5", - "@semantic-release/release-notes-generator": "^7.1.2", - "aggregate-error": "^3.0.0", - "cosmiconfig": "^6.0.0", - "debug": "^4.0.0", - "env-ci": "^4.0.0", - "execa": "^3.2.0", - "figures": "^3.0.0", - "find-versions": "^3.0.0", - "get-stream": "^5.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^2.0.0", - "hosted-git-info": "^3.0.0", - "lodash": "^4.17.15", - "marked": "^0.7.0", - "marked-terminal": "^3.2.0", - "p-locate": "^4.0.0", - "p-reduce": "^2.0.0", - "read-pkg-up": "^7.0.0", - "resolve-from": "^5.0.0", - "semver": "^6.0.0", - "signale": "^1.2.1", - "yargs": "^15.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "hosted-git-info": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", - "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==", - "dev": true, - "requires": { - "lru-cache": "^5.1.1" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "dev": true, - "requires": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - } - }, - "simple-git": { - "version": "1.132.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", - "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", - "dev": true, - "requires": { - "debug": "^4.0.1" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "requires": { - "through2": "^2.0.2" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "staged-git-files": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", - "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string.prototype.padend": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", - "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", - "dev": true, - "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - } - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "synchronous-promise": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.10.tgz", - "integrity": "sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A==", - "dev": true - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true - }, - "tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "dev": true, - "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", - "dev": true, - "requires": { - "readable-stream": "2 || 3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, - "ts-jest": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", - "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "0.x", - "resolve": "1.x", - "semver": "^5.5", - "yargs-parser": "10.x" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", - "dev": true - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", - "dev": true - }, - "uglify-js": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz", - "integrity": "sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universal-user-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz", - "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==", - "dev": true, - "requires": { - "os-name": "^3.1.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "windows-release": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz", - "integrity": "sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==", - "dev": true, - "requires": { - "execa": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", - "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yup": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", - "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "fn-name": "~2.0.1", - "lodash": "^4.17.11", - "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", - "toposort": "^2.0.2" - } - } - } -} diff --git a/src/model/model.ts b/src/model/model.ts index c1c8e8fc..7d15b827 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -317,8 +317,11 @@ export class Model { // removeFilteredPolicy removes policy rules based on field filters from the model. public removeFilteredPolicy(sec: string, key: string, fieldIndex: number, ...fieldValues: string[]): [boolean, string[][]] { const res = []; - const effects = []; + const effects: string[][] = []; let bool = false; + if (fieldValues.length == 0) { + return [false, effects]; + } const ast = this.model.get(sec)?.get(key); if (!ast) { return [false, []]; @@ -340,7 +343,10 @@ export class Model { res.push(rule); } } - ast.policy = res; + + if (effects.length != 0) { + ast.policy = res; + } return [bool, effects]; } From a415838a514706af8a9399c899959bdb069619d4 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 12 Aug 2020 01:57:54 +0800 Subject: [PATCH 383/497] fix: add check if the adapter implements BatchAdapter Signed-off-by: Zixuan Liu --- src/internalEnforcer.ts | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index e2e801c8..6e5b2132 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -59,14 +59,17 @@ export class InternalEnforcer extends CoreEnforcer { } } - const batchAdapter = this.adapter as BatchAdapter; - if (batchAdapter && this.autoSave) { - try { - await batchAdapter.addPolicies(sec, ptype, rules); - } catch (e) { - if (e.message !== 'not implemented') { - throw e; + if (this.autoSave) { + if ('addPolicies' in this.adapter) { + try { + await this.adapter.addPolicies(sec, ptype, rules); + } catch (e) { + if (e.message !== 'not implemented') { + throw e; + } } + } else { + throw new Error('cannot to save policy, the adapter does not implement the BatchAdapter'); } } @@ -120,14 +123,17 @@ export class InternalEnforcer extends CoreEnforcer { } } - const batchAdapter = this.adapter as BatchAdapter; - if (batchAdapter && this.autoSave) { - try { - await batchAdapter.removePolicies(sec, ptype, rules); - } catch (e) { - if (e.message !== 'not implemented') { - throw e; + if (this.autoSave) { + if ('removePolicies' in this.adapter) { + try { + await this.adapter.removePolicies(sec, ptype, rules); + } catch (e) { + if (e.message !== 'not implemented') { + throw e; + } } + } else { + throw new Error('cannot to save policy, the adapter does not implement the BatchAdapter'); } } From a46cf86c39a6b61e6e1df610ef13135aa9ae23e6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 12 Aug 2020 00:25:06 +0000 Subject: [PATCH 384/497] chore(release): 5.1.1 [skip ci] ## [5.1.1](https://github.com/casbin/node-casbin/compare/v5.1.0...v5.1.1) (2020-08-12) ### Bug Fixes * add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/node-casbin/commit/a415838a514706af8a9399c899959bdb069619d4)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16049c2d..28528c11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.1.1](https://github.com/casbin/node-casbin/compare/v5.1.0...v5.1.1) (2020-08-12) + + +### Bug Fixes + +* add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/node-casbin/commit/a415838a514706af8a9399c899959bdb069619d4)) + # [5.1.0](https://github.com/casbin/node-casbin/compare/v5.0.7...v5.1.0) (2020-08-11) diff --git a/package.json b/package.json index 8e34a476..82366888 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.1.0", + "version": "5.1.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From cc322ab8740c302ea2aef8e290853810831334ce Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 12 Aug 2020 00:32:07 +0000 Subject: [PATCH 385/497] chore(release): 5.1.2 [skip ci] ## [5.1.2](https://github.com/casbin/node-casbin/compare/v5.1.1...v5.1.2) (2020-08-12) ### Bug Fixes * add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/node-casbin/commit/6e144fb9a895332245006ef3a28c47d022654895)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28528c11..ae28579b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.1.2](https://github.com/casbin/node-casbin/compare/v5.1.1...v5.1.2) (2020-08-12) + + +### Bug Fixes + +* add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/node-casbin/commit/6e144fb9a895332245006ef3a28c47d022654895)) + ## [5.1.1](https://github.com/casbin/node-casbin/compare/v5.1.0...v5.1.1) (2020-08-12) diff --git a/package.json b/package.json index 82366888..d8120809 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.1.1", + "version": "5.1.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 6c277e8858cf07d9a098817b72710a30c4117fa9 Mon Sep 17 00:00:00 2001 From: Zihui Liu Date: Mon, 31 Aug 2020 01:22:10 +0800 Subject: [PATCH 386/497] fix: update casbinJsGetPermissionForUser for v0.1.0 Casbin.js (#186) Signed-off-by: kingiw --- src/frontend.ts | 48 ++++++++++++++++++++++++++++++++----------- test/frontend.test.ts | 26 +++++++++++------------ 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/frontend.ts b/src/frontend.ts index e148f41b..4554c294 100644 --- a/src/frontend.ts +++ b/src/frontend.ts @@ -15,6 +15,7 @@ import { Enforcer } from './enforcer'; /** + * Experiment! * getPermissionForCasbinJs returns a string describing the permission of a given user. * You can pass the returned string to the frontend and manage your webpage widgets and APIs with Casbin.js. * The returned permission depends on `getImplicitPermissionsForUser`. @@ -23,16 +24,39 @@ import { Enforcer } from './enforcer'; * @param user the user */ export async function casbinJsGetPermissionForUser(e: Enforcer, user: string): Promise { - const policies = await e.getImplicitPermissionsForUser(user); - const permission: { [key: string]: string[] } = {}; - policies.forEach(policy => { - if (!(policy[2] in permission)) { - permission[policy[2]] = []; - } - if (permission[policy[2]].indexOf(policy[1]) == -1) { - permission[policy[2]].push(policy[1]); - } - }); - const permString = JSON.stringify(permission); - return permString; + const obj: any = {}; + + const m = e.getModel().model; + let s = ''; + s += '[request_definition]\n'; + s += `r = ${m + .get('r') + ?.get('r') + ?.value.replace(/_/g, '.')}\n`; + s += '[policy_definition]\n'; + s += `p = ${m + .get('p') + ?.get('p') + ?.value.replace(/_/g, '.')}\n`; + if (m.get('g')?.get('g') !== undefined) { + s += '[role_definition]\n'; + s += `g = ${m.get('g')?.get('g')?.value}\n`; + } + s += '[policy_effect]\n'; + s += `e = ${m + .get('e') + ?.get('e') + ?.value.replace(/_/g, '.')}\n`; + s += '[matchers]\n'; + s += `m = ${m + .get('m') + ?.get('m') + ?.value.replace(/_/g, '.')}`; + obj['m'] = s; + obj['p'] = await e.getPolicy(); + for (const arr of obj['p']) { + arr.splice(0, 0, 'p'); + } + + return JSON.stringify(obj); } diff --git a/test/frontend.test.ts b/test/frontend.test.ts index a9fcd725..54c82d01 100644 --- a/test/frontend.test.ts +++ b/test/frontend.test.ts @@ -12,22 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. +import { readFileSync } from 'fs'; import { newEnforcer } from '../src/index'; import { casbinJsGetPermissionForUser } from '../src/frontend'; test('TestCasbinJsGetPermissionForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); - let permStr = await casbinJsGetPermissionForUser(e, 'alice'); - let perm = JSON.parse(permStr); - expect(perm['read']).toContain('data1'); - expect(perm['write']).toContain('data1'); - expect(perm['read']).toContain('data2'); - expect(perm['write']).toContain('data2'); - - permStr = await casbinJsGetPermissionForUser(e, 'bob'); - perm = JSON.parse(permStr); - expect(perm['write']).toContain('data2'); - expect(perm['write']).not.toContain('data1'); - expect(perm['read']).not.toBeNull; - expect(perm['rm_rf']).toBeNull; + const received = JSON.parse(await casbinJsGetPermissionForUser(e, 'alice')); + const expectedModelStr = readFileSync('examples/rbac_model.conf').toString(); + expect(received['m']).toBe(expectedModelStr.replace(/\n\n/g, '\n')); + const expectedPoliciesStr = readFileSync('examples/rbac_with_hierarchy_policy.csv').toString(); + const expectedPolicyItem = expectedPoliciesStr.split(RegExp(',|\n')); + let i = 0; + for (const sArr of received['p']) { + for (const s of sArr) { + expect(s.trim()).toEqual(expectedPolicyItem[i].trim()); + i = i + 1; + } + } }); From 45ea2b7028c410938e10b6be212df2a0bb119d8d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 30 Aug 2020 17:27:17 +0000 Subject: [PATCH 387/497] chore(release): 5.1.3 [skip ci] ## [5.1.3](https://github.com/casbin/node-casbin/compare/v5.1.2...v5.1.3) (2020-08-30) ### Bug Fixes * update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/node-casbin/issues/186)) ([6c277e8](https://github.com/casbin/node-casbin/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae28579b..f4638291 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.1.3](https://github.com/casbin/node-casbin/compare/v5.1.2...v5.1.3) (2020-08-30) + + +### Bug Fixes + +* update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/node-casbin/issues/186)) ([6c277e8](https://github.com/casbin/node-casbin/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) + ## [5.1.2](https://github.com/casbin/node-casbin/compare/v5.1.1...v5.1.2) (2020-08-12) diff --git a/package.json b/package.json index d8120809..08f7687f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.1.2", + "version": "5.1.3", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 9 Sep 2020 15:03:31 +0800 Subject: [PATCH 388/497] fix: add cache to generateGFunction Signed-off-by: Zixuan Liu --- src/util/builtinOperators.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index e03df6bd..657920c4 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -233,19 +233,29 @@ function globMatch(string: string, pattern: string): boolean { // generateGFunction is the factory method of the g(_, _) function. function generateGFunction(rm: rbac.RoleManager): any { + const memorized = new Map(); return async function func(...args: any[]): Promise { + const key = args.toString(); + let value = memorized.get(key); + if (value) { + return value; + } + const [arg0, arg1] = args; const name1: string = (arg0 || '').toString(); const name2: string = (arg1 || '').toString(); if (!rm) { - return name1 === name2; + value = name1 === name2; } else if (args.length === 2) { - return await rm.hasLink(name1, name2); + value = await rm.hasLink(name1, name2); } else { const domain: string = args[2].toString(); - return await rm.hasLink(name1, name2, domain); + value = await rm.hasLink(name1, name2, domain); } + + memorized.set(key, value); + return value; }; } From 4069a1852098f50153d1701bbd8a57c1d70d79e2 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 10 Sep 2020 15:11:05 +0000 Subject: [PATCH 389/497] chore(release): 5.1.4 [skip ci] ## [5.1.4](https://github.com/casbin/node-casbin/compare/v5.1.3...v5.1.4) (2020-09-10) ### Bug Fixes * add cache to generateGFunction ([e90bed2](https://github.com/casbin/node-casbin/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4638291..a53bb5c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.1.4](https://github.com/casbin/node-casbin/compare/v5.1.3...v5.1.4) (2020-09-10) + + +### Bug Fixes + +* add cache to generateGFunction ([e90bed2](https://github.com/casbin/node-casbin/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) + ## [5.1.3](https://github.com/casbin/node-casbin/compare/v5.1.2...v5.1.3) (2020-08-30) diff --git a/package.json b/package.json index 08f7687f..71bdbe0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.1.3", + "version": "5.1.4", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From f426131e752143251db6c11a7352d91d959cb503 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 15 Sep 2020 00:00:35 +0800 Subject: [PATCH 390/497] fix: ignore print model Signed-off-by: Zixuan Liu --- src/coreEnforcer.ts | 2 -- src/model/model.ts | 5 ++++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 70c4bcab..9eb98e86 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -149,7 +149,6 @@ export class CoreEnforcer { this.model.clearPolicy(); await this.adapter.loadPolicy(this.model); - this.model.printPolicy(); if (this.autoBuildRoleLinks) { await this.buildRoleLinksInternal(); } @@ -169,7 +168,6 @@ export class CoreEnforcer { throw new Error('filtered policies are not supported by this adapter'); } - this.model.printPolicy(); if (this.autoBuildRoleLinks) { await this.buildRoleLinksInternal(); } diff --git a/src/model/model.ts b/src/model/model.ts index 7d15b827..ed7cd5cd 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -16,7 +16,7 @@ import * as rbac from '../rbac'; import * as util from '../util'; import { Config, ConfigInterface } from '../config'; import { Assertion } from './assertion'; -import { logPrint } from '../log'; +import { getLogger, logPrint } from '../log'; export const sectionNameMap: { [index: string]: string } = { r: 'request_definition', @@ -379,6 +379,9 @@ export class Model { // printPolicy prints the policy to log. public printPolicy(): void { + if (!getLogger().isEnable()) { + return; + } logPrint('Policy:'); this.model.forEach((map, key) => { if (key === 'p' || key === 'g') { From dc22145ac25a5db36db117b210317ec0f2523e79 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 14 Sep 2020 16:19:57 +0000 Subject: [PATCH 391/497] chore(release): 5.1.5 [skip ci] ## [5.1.5](https://github.com/casbin/node-casbin/compare/v5.1.4...v5.1.5) (2020-09-14) ### Bug Fixes * ignore print model ([f426131](https://github.com/casbin/node-casbin/commit/f426131e752143251db6c11a7352d91d959cb503)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a53bb5c1..ea668d38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.1.5](https://github.com/casbin/node-casbin/compare/v5.1.4...v5.1.5) (2020-09-14) + + +### Bug Fixes + +* ignore print model ([f426131](https://github.com/casbin/node-casbin/commit/f426131e752143251db6c11a7352d91d959cb503)) + ## [5.1.4](https://github.com/casbin/node-casbin/compare/v5.1.3...v5.1.4) (2020-09-10) diff --git a/package.json b/package.json index 71bdbe0a..c0d36df3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.1.4", + "version": "5.1.5", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 27005f85829f11193cb4ecfd14be5ed6e64ad63c Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 7 Oct 2020 19:17:15 +0800 Subject: [PATCH 392/497] fix: support pattern function in 3rd args of g (#199) Signed-off-by: Zixuan Liu --- examples/rbac_with_all_pattern_model.conf | 14 + examples/rbac_with_all_pattern_policy.csv | 4 + examples/rbac_with_domain_pattern_model.conf | 14 + examples/rbac_with_domain_pattern_policy.csv | 7 + src/rbac/defaultRoleManager.ts | 278 ++++++++++++------- src/util/builtinOperators.ts | 3 + test/model.test.ts | 37 ++- test/rbac/defaultRoleManager.test.ts | 14 + 8 files changed, 268 insertions(+), 103 deletions(-) create mode 100644 examples/rbac_with_all_pattern_model.conf create mode 100644 examples/rbac_with_all_pattern_policy.csv create mode 100644 examples/rbac_with_domain_pattern_model.conf create mode 100644 examples/rbac_with_domain_pattern_policy.csv create mode 100644 test/rbac/defaultRoleManager.test.ts diff --git a/examples/rbac_with_all_pattern_model.conf b/examples/rbac_with_all_pattern_model.conf new file mode 100644 index 00000000..045bfa57 --- /dev/null +++ b/examples/rbac_with_all_pattern_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, dom, obj, act + +[policy_definition] +p = sub, dom, obj, act + +[role_definition] +g = _, _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && g(r.obj, p.obj, r.dom) && r.dom == p.dom && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_with_all_pattern_policy.csv b/examples/rbac_with_all_pattern_policy.csv new file mode 100644 index 00000000..8097be8a --- /dev/null +++ b/examples/rbac_with_all_pattern_policy.csv @@ -0,0 +1,4 @@ +p, alice, domain1, book_group, read +p, alice, domain2, book_group, write + +g, /book/:id, book_group, * \ No newline at end of file diff --git a/examples/rbac_with_domain_pattern_model.conf b/examples/rbac_with_domain_pattern_model.conf new file mode 100644 index 00000000..774e4418 --- /dev/null +++ b/examples/rbac_with_domain_pattern_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, dom, obj, act + +[policy_definition] +p = sub, dom, obj, act + +[role_definition] +g = _, _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/rbac_with_domain_pattern_policy.csv b/examples/rbac_with_domain_pattern_policy.csv new file mode 100644 index 00000000..c8abd35e --- /dev/null +++ b/examples/rbac_with_domain_pattern_policy.csv @@ -0,0 +1,7 @@ +p, admin, domain1, data1, read +p, admin, domain1, data1, write +p, admin, domain2, data2, read +p, admin, domain2, data2, write + +g, alice, admin, * +g, bob, admin, domain2 \ No newline at end of file diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 13b076ed..7cdf4d2e 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -13,7 +13,23 @@ // limitations under the License. import { RoleManager } from './roleManager'; -import { logPrint } from '../log'; +import { getLogger, logPrint } from '../log'; + +type MatchingFunc = (arg1: string, arg2: string) => boolean; + +// DEFAULT_DOMAIN defines the default domain space. +const DEFAULT_DOMAIN = 'casbin::default'; + +// loadOrDefault returns the existing value for the key if present. +// Otherwise, it stores and returns the given value. +function loadOrDefault(map: Map, key: K, value: V): V { + const read = map.get(key); + if (read === undefined) { + map.set(key, value); + return value; + } + return read; +} /** * Role represents the data structure for a role in RBAC. @@ -67,14 +83,48 @@ class Role { } } -type MatchingFunc = (arg1: string, arg2: string) => boolean; +class Roles extends Map { + constructor() { + super(); + } + + public hasRole(name: string, matchingFunc?: MatchingFunc): boolean { + let ok = false; + if (matchingFunc) { + this.forEach((value, key) => { + if (matchingFunc(name, key)) { + ok = true; + } + }); + } else { + return this.has(name); + } + return true; + } + + public createRole(name: string, matchingFunc?: MatchingFunc): Role { + const role = loadOrDefault(this, name, new Role(name)); + if (matchingFunc) { + this.forEach((value, key) => { + if (matchingFunc(name, key) && name !== key) { + // Add new role to matching role + const role1 = loadOrDefault(this, key, new Role(key)); + role.addRole(role1); + } + }); + } + return role; + } +} // RoleManager provides a default implementation for the RoleManager interface export class DefaultRoleManager implements RoleManager { - private allRoles: Map; + private allDomains: Map; private maxHierarchyLevel: number; private hasPattern = false; + private hasDomainPattern = false; private matchingFunc: MatchingFunc; + private domainMatchingFunc: MatchingFunc; /** * DefaultRoleManager is the constructor for creating an instance of the @@ -83,21 +133,74 @@ export class DefaultRoleManager implements RoleManager { * @param maxHierarchyLevel the maximized allowed RBAC hierarchy level. */ constructor(maxHierarchyLevel: number) { - this.allRoles = new Map(); + this.allDomains = new Map(); + this.allDomains.set(DEFAULT_DOMAIN, new Roles()); this.maxHierarchyLevel = maxHierarchyLevel; } /** - * e.buildRoleLinks must be called after addMatchingFunc(). - * @param name - * @param fn - * @example ```javascript - * await e.GetRoleManager().addMatchingFunc('matcher', util.keyMatch); await e.buildRoleLinks(); - * ``` + * addMatchingFunc support use pattern in g + * @param name name + * @param fn matching function + * @deprecated + */ + public async addMatchingFunc(name: string, fn: MatchingFunc): Promise; + + /** + * addMatchingFunc support use pattern in g + * @param fn matching function */ - public async addMatchingFunc(name: string, fn: MatchingFunc): Promise { + public async addMatchingFunc(fn: MatchingFunc): Promise; + + /** + * addMatchingFunc support use pattern in g + * @param name name + * @param fn matching function + * @deprecated + */ + public async addMatchingFunc(name: string | MatchingFunc, fn?: MatchingFunc): Promise { this.hasPattern = true; - this.matchingFunc = fn; + if (typeof name === 'string' && fn) { + this.matchingFunc = fn; + } else if (typeof name === 'function') { + this.matchingFunc = name; + } else { + throw new Error('error: domain should be 1 parameter'); + } + } + + /** + * addDomainMatchingFunc support use domain pattern in g + * @param fn domain matching function + * ``` + */ + public async addDomainMatchingFunc(fn: MatchingFunc): Promise { + this.hasDomainPattern = true; + this.domainMatchingFunc = fn; + } + + private generateTempRoles(domain: string): Roles { + loadOrDefault(this.allDomains, domain, new Roles()); + + const patternDomain = new Set([domain]); + if (this.hasDomainPattern) { + this.allDomains.forEach((value, key) => { + if (this.domainMatchingFunc(domain, key)) { + patternDomain.add(key); + } + }); + } + + const allRoles = new Roles(); + patternDomain.forEach(domain => { + loadOrDefault(this.allDomains, domain, new Roles()).forEach((value, key) => { + const role1 = allRoles.createRole(value.name, this.matchingFunc); + value.getRoles().forEach(n => { + role1.addRole(allRoles.createRole(n, this.matchingFunc)); + }); + }); + }); + return allRoles; } /** @@ -106,15 +209,16 @@ export class DefaultRoleManager implements RoleManager { * domain is a prefix to the roles. */ public async addLink(name1: string, name2: string, ...domain: string[]): Promise { - if (domain.length === 1) { - name1 = domain[0] + '::' + name1; - name2 = domain[0] + '::' + name2; + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; } else if (domain.length > 1) { throw new Error('error: domain should be 1 parameter'); } - const role1 = this.createRole(name1); - const role2 = this.createRole(name2); + const allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); + + const role1 = loadOrDefault(allRoles, name1, new Role(name1)); + const role2 = loadOrDefault(allRoles, name2, new Role(name2)); role1.addRole(role2); } @@ -122,7 +226,8 @@ export class DefaultRoleManager implements RoleManager { * clear clears all stored data and resets the role manager to the initial state. */ public async clear(): Promise { - this.allRoles = new Map(); + this.allDomains = new Map(); + this.allDomains.set(DEFAULT_DOMAIN, new Roles()); } /** @@ -131,138 +236,111 @@ export class DefaultRoleManager implements RoleManager { * domain is a prefix to the roles. */ public async deleteLink(name1: string, name2: string, ...domain: string[]): Promise { - if (domain.length === 1) { - name1 = domain[0] + '::' + name1; - name2 = domain[0] + '::' + name2; + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; } else if (domain.length > 1) { throw new Error('error: domain should be 1 parameter'); } - if (!this.hasRole(name1) || !this.hasRole(name2)) { + const allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); + + if (!allRoles.has(name1) || !allRoles.has(name2)) { return; } - const role1 = this.createRole(name1); - const role2 = this.createRole(name2); + const role1 = loadOrDefault(allRoles, name1, new Role(name1)); + const role2 = loadOrDefault(allRoles, name2, new Role(name2)); role1.deleteRole(role2); } /** - * getRoles gets the roles that a subject inherits. + * hasLink determines whether role: name1 inherits role: name2. * domain is a prefix to the roles. */ - public async getRoles(name: string, ...domain: string[]): Promise { - if (domain.length === 1) { - name = domain[0] + '::' + name; + public async hasLink(name1: string, name2: string, ...domain: string[]): Promise { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; } else if (domain.length > 1) { throw new Error('error: domain should be 1 parameter'); } - if (!this.hasRole(name)) { - return []; + if (name1 === name2) { + return true; } - let roles = this.createRole(name).getRoles(); - if (domain.length === 1) { - roles = roles.map(n => n.substring(domain[0].length + 2, n.length)); + let allRoles: Roles; + if (this.hasPattern || this.hasDomainPattern) { + allRoles = this.generateTempRoles(domain[0]); + } else { + allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); } - return roles; + if (!allRoles.hasRole(name1, this.matchingFunc) || !allRoles.hasRole(name2, this.matchingFunc)) { + return false; + } + + const role1 = allRoles.createRole(name1, this.matchingFunc); + return role1.hasRole(name2, this.maxHierarchyLevel); } /** - * getUsers gets the users that inherits a subject. - * domain is an unreferenced parameter here, may be used in other implementations. + * getRoles gets the roles that a subject inherits. + * domain is a prefix to the roles. */ - public async getUsers(name: string, ...domain: string[]): Promise { - if (domain.length === 1) { - name = domain[0] + '::' + name; + public async getRoles(name: string, ...domain: string[]): Promise { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; } else if (domain.length > 1) { throw new Error('error: domain should be 1 parameter'); } - if (!this.hasRole(name)) { - return []; + let allRoles: Roles; + if (this.hasPattern || this.hasDomainPattern) { + allRoles = this.generateTempRoles(domain[0]); + } else { + allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); } - let users = [...this.allRoles.values()].filter(n => n.hasDirectRole(name)).map(n => n.name); - if (domain.length === 1) { - users = users.map(n => n.substring(domain[0].length + 2, n.length)); + if (!allRoles.hasRole(name, this.matchingFunc)) { + return []; } - return users; + + return allRoles.createRole(name, this.matchingFunc).getRoles(); } /** - * hasLink determines whether role: name1 inherits role: name2. - * domain is a prefix to the roles. + * getUsers gets the users that inherits a subject. + * domain is an unreferenced parameter here, may be used in other implementations. */ - public async hasLink(name1: string, name2: string, ...domain: string[]): Promise { - if (domain.length === 1) { - name1 = domain[0] + '::' + name1; - name2 = domain[0] + '::' + name2; + public async getUsers(name: string, ...domain: string[]): Promise { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; } else if (domain.length > 1) { throw new Error('error: domain should be 1 parameter'); } - if (name1 === name2) { - return true; + let allRoles: Roles; + if (this.hasPattern || this.hasDomainPattern) { + allRoles = this.generateTempRoles(domain[0]); + } else { + allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); } - if (!this.hasRole(name1) || !this.hasRole(name2)) { - return false; + if (!allRoles.hasRole(name, this.matchingFunc)) { + return []; } - const role1 = this.createRole(name1); - - return role1.hasRole(name2, this.maxHierarchyLevel); + return [...allRoles.values()].filter(n => n.hasDirectRole(name)).map(n => n.name); } /** * printRoles prints all the roles to log. */ public async printRoles(): Promise { - [...this.allRoles.values()].forEach(n => { - logPrint(n.toString()); - }); - } - - private createRole(name: string): Role { - let role = this.allRoles.get(name); - if (!role) { - const newRole = new Role(name); - role = newRole; - this.allRoles.set(name, newRole); - } - - if (!this.hasPattern) { - return role; - } - - for (const roleName of this.allRoles.keys()) { - if (!(this.matchingFunc(name, roleName) && name !== roleName)) { - continue; - } - - const inherit = this.allRoles.get(roleName); - if (inherit) { - role.addRole(inherit); - } - } - - return role; - } - - private hasRole(name: string): boolean { - if (!this.hasPattern) { - return this.allRoles.has(name); - } else { - for (const role of this.allRoles.keys()) { - if (this.matchingFunc(name, role)) { - return true; - } - } + if (getLogger().isEnable()) { + [...this.allDomains.values()].forEach(n => { + logPrint(n.toString()); + }); } - - return false; } } diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 657920c4..1ab496a0 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -60,6 +60,9 @@ function keyMatch2(key1: string, key2: string): boolean { key2 = key2.replace(regexp, '$1[^/]+$2'); } + if (key2 === '*') { + key2 = '(.*)'; + } return regexMatch(key1, '^' + key2 + '$'); } diff --git a/test/model.test.ts b/test/model.test.ts index 77b7f8b6..29288976 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -310,7 +310,7 @@ test('TestRBACModelWithPattern', async () => { // of checking whether "/book/:id" equals the obj: "/book/1", it checks whether the pattern matches. // You can see it as normal RBAC: "/book/:id" == "/book/1" becomes KeyMatch2("/book/:id", "/book/1") const rm = e.getRoleManager() as DefaultRoleManager; - await rm.addMatchingFunc('KeyMatch2', keyMatch2Func); + await rm.addMatchingFunc(keyMatch2Func); await e.buildRoleLinks(); await testEnforce(e, 'alice', '/book/1', 'GET', true); await testEnforce(e, 'alice', '/book/2', 'GET', true); @@ -323,7 +323,7 @@ test('TestRBACModelWithPattern', async () => { // AddMatchingFunc() is actually setting a function because only one function is allowed, // so when we set "KeyMatch3", we are actually replacing "KeyMatch2" with "KeyMatch3". - await rm.addMatchingFunc('KeyMatch3', keyMatch3Func); + await rm.addMatchingFunc(keyMatch3Func); await e.buildRoleLinks(); await testEnforce(e, 'alice', '/book2/1', 'GET', true); await testEnforce(e, 'alice', '/book2/2', 'GET', true); @@ -339,8 +339,39 @@ test('TestNodeCasbin150', async () => { const e = await newEnforcer('examples/issues/node_casbin_150_model.conf', 'examples/issues/node_casbin_150_policy.csv'); const rm = e.getRoleManager() as DefaultRoleManager; - await rm.addMatchingFunc('KeyMatch', keyMatchFunc); + await rm.addMatchingFunc(keyMatchFunc); await e.buildRoleLinks(); await e.getImplicitRolesForUser('alice'); }); + +test('TestDomainMatchModel', async () => { + const e = await newEnforcer('examples/rbac_with_domain_pattern_model.conf', 'examples/rbac_with_domain_pattern_policy.csv'); + + const rm = e.getRoleManager() as DefaultRoleManager; + await rm.addDomainMatchingFunc(keyMatch2Func); + + await testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); + await testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); + await testDomainEnforce(e, 'alice', 'domain1', 'data2', 'read', false); + await testDomainEnforce(e, 'alice', 'domain1', 'data2', 'write', false); + await testDomainEnforce(e, 'alice', 'domain2', 'data2', 'read', true); + await testDomainEnforce(e, 'alice', 'domain2', 'data2', 'write', true); + await testDomainEnforce(e, 'bob', 'domain2', 'data1', 'read', false); + await testDomainEnforce(e, 'bob', 'domain2', 'data1', 'write', false); + await testDomainEnforce(e, 'bob', 'domain2', 'data2', 'read', true); + await testDomainEnforce(e, 'bob', 'domain2', 'data2', 'write', true); +}); + +test('TestAllMatchModel', async () => { + const e = await newEnforcer('examples/rbac_with_all_pattern_model.conf', 'examples/rbac_with_all_pattern_policy.csv'); + + const rm = e.getRoleManager() as DefaultRoleManager; + await rm.addMatchingFunc(keyMatch2Func); + await rm.addDomainMatchingFunc(keyMatch2Func); + + await testDomainEnforce(e, 'alice', 'domain1', '/book/1', 'read', true); + await testDomainEnforce(e, 'alice', 'domain1', '/book/1', 'write', false); + await testDomainEnforce(e, 'alice', 'domain2', '/book/1', 'read', false); + await testDomainEnforce(e, 'alice', 'domain2', '/book/1', 'write', true); +}); diff --git a/test/rbac/defaultRoleManager.test.ts b/test/rbac/defaultRoleManager.test.ts new file mode 100644 index 00000000..c0059bb1 --- /dev/null +++ b/test/rbac/defaultRoleManager.test.ts @@ -0,0 +1,14 @@ +import { DefaultRoleManager } from '../../src/rbac'; +import { keyMatch2Func } from '../../src/util'; + +test('TestAllMatchingFunc', async () => { + const rm = new DefaultRoleManager(10); + await rm.addMatchingFunc(keyMatch2Func); + await rm.addDomainMatchingFunc(keyMatch2Func); + await rm.addLink('/book/:id', 'book_group', '*'); + // Current role inheritance tree after deleting the links: + // *:book_group + // | + // *:/book/:id + expect(await rm.hasLink('/book/1', 'book_group', 'domain1')).toBe(true); +}); From 42861c271b26b41314ddabcb8805e9e99079ca3d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 7 Oct 2020 11:22:26 +0000 Subject: [PATCH 393/497] chore(release): 5.1.6 [skip ci] ## [5.1.6](https://github.com/casbin/node-casbin/compare/v5.1.5...v5.1.6) (2020-10-07) ### Bug Fixes * support pattern function in 3rd args of g ([#199](https://github.com/casbin/node-casbin/issues/199)) ([27005f8](https://github.com/casbin/node-casbin/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea668d38..06a1bda7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.1.6](https://github.com/casbin/node-casbin/compare/v5.1.5...v5.1.6) (2020-10-07) + + +### Bug Fixes + +* support pattern function in 3rd args of g ([#199](https://github.com/casbin/node-casbin/issues/199)) ([27005f8](https://github.com/casbin/node-casbin/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) + ## [5.1.5](https://github.com/casbin/node-casbin/compare/v5.1.4...v5.1.5) (2020-09-14) diff --git a/package.json b/package.json index c0d36df3..3bb4b2d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.1.5", + "version": "5.1.6", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 366d2d848b22652def96e628fe8edfb1b9d3f40b Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 8 Oct 2020 21:48:55 +0800 Subject: [PATCH 394/497] chore: upgrade eslint and format code Signed-off-by: Zixuan Liu --- .eslintrc | 11 +- jest.config.js | 4 +- package.json | 14 +- src/cachedEnforcer.ts | 4 +- src/coreEnforcer.ts | 36 +- src/effect/defaultEffectorStream.ts | 8 +- src/effect/effector.ts | 2 +- src/enforcer.ts | 16 +- src/frontend.ts | 20 +- src/managementEnforcer.ts | 3 +- src/model/functionMap.ts | 4 +- src/model/model.ts | 23 +- src/persist/fileAdapter.ts | 8 +- src/persist/helper.ts | 2 +- src/rbac/defaultRoleManager.ts | 16 +- src/util/util.ts | 8 +- test/config/config.test.ts | 14 +- test/enforcer.test.ts | 2 +- test/managementAPI.test.ts | 20 +- test/model/model.test.ts | 4 +- test/rbacAPI.test.ts | 16 +- yarn.lock | 8418 +++++++++++++++++++++++++++ 22 files changed, 8524 insertions(+), 129 deletions(-) create mode 100644 yarn.lock diff --git a/.eslintrc b/.eslintrc index c951663a..31c520b9 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,12 +1,9 @@ { "parser": "@typescript-eslint/parser", - "extends": [ - "plugin:@typescript-eslint/recommended", - "prettier/@typescript-eslint", - "plugin:prettier/recommended" - ], + "extends": ["plugin:@typescript-eslint/recommended", "prettier/@typescript-eslint", "plugin:prettier/recommended"], "rules": { "prettier/prettier": "error", + "eqeqeq": "error", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-unused-vars": "off", "@typescript-eslint/explicit-function-return-type": [ @@ -15,9 +12,7 @@ "allowExpressions": true } ], - "@typescript-eslint/no-non-null-assertion": [ - "error" - ] + "@typescript-eslint/no-non-null-assertion": ["error"] }, "env": { "jest": true, diff --git a/jest.config.js b/jest.config.js index 7e09a449..095740e8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,7 @@ module.exports = { testEnvironment: 'node', transform: { - '^.+\\.(ts|tsx)$': 'ts-jest' + '^.+\\.(ts|tsx)$': 'ts-jest', }, - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'] + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], }; diff --git a/package.json b/package.json index 3bb4b2d2..7fb3955f 100644 --- a/package.json +++ b/package.json @@ -26,19 +26,19 @@ "@types/lodash": "^4.14.113", "@types/micromatch": "^4.0.1", "@types/node": "^10.5.3", - "@typescript-eslint/eslint-plugin": "^2.6.1", - "@typescript-eslint/parser": "^2.6.1", + "@typescript-eslint/eslint-plugin": "^4.4.0", + "@typescript-eslint/parser": "^4.4.0", "coveralls": "^3.0.2", "cz-conventional-changelog": "^3.2.0", - "eslint": "^6.6.0", - "eslint-config-prettier": "^6.5.0", - "eslint-plugin-prettier": "^3.1.1", + "eslint": "^7.10.0", + "eslint-config-prettier": "^6.12.0", + "eslint-plugin-prettier": "^3.1.4", "husky": "^2.3.0", "jest": "^24.3.1", "lint-staged": "^8.1.7", "npm-run-all": "^4.1.5", - "prettier": "^1.19.1", - "pretty-quick": "^2.0.1", + "prettier": "^2.1.2", + "pretty-quick": "^3.0.2", "rimraf": "^2.6.2", "semantic-release": "^15.13.31", "ts-jest": "^24.0.0", diff --git a/src/cachedEnforcer.ts b/src/cachedEnforcer.ts index 508a2389..692b236b 100644 --- a/src/cachedEnforcer.ts +++ b/src/cachedEnforcer.ts @@ -30,7 +30,7 @@ export class CachedEnforcer extends Enforcer { } private static canCache(...rvals: any[]): boolean { - return rvals.every(n => typeof n === 'string'); + return rvals.every((n) => typeof n === 'string'); } private static getCacheKey(...rvals: string[]): string { @@ -59,7 +59,7 @@ export class CachedEnforcer extends Enforcer { key = CachedEnforcer.getCacheKey(...rvals); const res = this.getCache(key); - if (res != undefined) { + if (res !== undefined) { return res; } } diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 9eb98e86..0141abb5 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -21,7 +21,7 @@ import { DefaultRoleManager, RoleManager } from './rbac'; import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval } from './util'; import { getLogger, logPrint } from './log'; -type Matcher = ((context: object) => Promise) | ((context: object) => any); +type Matcher = ((context: any) => Promise) | ((context: any) => any); /** * CoreEnforcer defines the core functionality of an enforcer. @@ -159,6 +159,7 @@ export class CoreEnforcer { * * @param filter the filter used to specify which type of policy should be loaded. */ + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types public async loadFilteredPolicy(filter: any): Promise { this.model.clearPolicy(); @@ -301,11 +302,7 @@ export class CoreEnforcer { } const HasEval: boolean = hasEval(expString); - let expression; - - if (!HasEval) { - expression = this.getExpression(asyncCompile, expString); - } + let expression: Matcher | undefined = undefined; const p = this.model.model.get('p')?.get('p'); const policyLen = p?.policy?.length; @@ -339,18 +336,18 @@ export class CoreEnforcer { const rule = escapeAssertion(parameters[ruleName]); expWithRule = replaceEval(expWithRule, rule); } else { - return false; + throw new Error(`${ruleName} not in ${parameters}`); } - - expression = this.getExpression(asyncCompile, expWithRule); + } + expression = this.getExpression(asyncCompile, expWithRule); + } else { + if (expression === undefined) { + expression = this.getExpression(asyncCompile, expString); } } - let result; - if (expression != undefined) { - const context = { ...parameters, ...functions }; - result = asyncCompile ? await expression(context) : expression(context); - } + const context = { ...parameters, ...functions }; + const result = asyncCompile ? await expression(context) : expression(context); let eftRes: Effect; switch (typeof result) { @@ -392,16 +389,13 @@ export class CoreEnforcer { parameters[token] = rvals[j]; }); - p?.tokens?.forEach(token => { + p?.tokens?.forEach((token) => { parameters[token] = ''; }); - let result = false; - - if (expression != undefined) { - const context = { ...parameters, ...functions }; - result = asyncCompile ? await expression(context) : expression(context); - } + expression = this.getExpression(asyncCompile, expString); + const context = { ...parameters, ...functions }; + const result = asyncCompile ? await expression(context) : expression(context); if (result) { effectStream.pushEffect(Effect.Allow); diff --git a/src/effect/defaultEffectorStream.ts b/src/effect/defaultEffectorStream.ts index 0df148ec..faee3aac 100644 --- a/src/effect/defaultEffectorStream.ts +++ b/src/effect/defaultEffectorStream.ts @@ -34,22 +34,22 @@ export class DefaultEffectorStream implements EffectorStream { public pushEffect(eft: Effect): [boolean, boolean] { switch (this.expr) { case 'some(where (p_eft == allow))': - if (eft == Effect.Allow) { + if (eft === Effect.Allow) { this.res = true; this.done = true; } break; case '!some(where (p_eft == deny))': this.res = true; - if (eft == Effect.Deny) { + if (eft === Effect.Deny) { this.res = false; this.done = true; } break; case 'some(where (p_eft == allow)) && !some(where (p_eft == deny))': - if (eft == Effect.Allow) { + if (eft === Effect.Allow) { this.res = true; - } else if (eft == Effect.Deny) { + } else if (eft === Effect.Deny) { this.res = false; this.done = true; } diff --git a/src/effect/effector.ts b/src/effect/effector.ts index f353b76d..ad729fcd 100644 --- a/src/effect/effector.ts +++ b/src/effect/effector.ts @@ -19,7 +19,7 @@ import { EffectorStream } from './effectorStream'; export enum Effect { Allow = 1, Indeterminate, - Deny + Deny, } // Effector is the interface for Casbin effectors. diff --git a/src/enforcer.ts b/src/enforcer.ts index 3811169d..5faff2d7 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -80,7 +80,7 @@ export class Enforcer extends ManagementEnforcer { * @return the roles that the user has. */ public async getRolesForUser(name: string, domain?: string): Promise { - if (domain == null) { + if (domain === undefined) { return this.rm.getRoles(name); } else { return this.rm.getRoles(name, domain); @@ -95,7 +95,7 @@ export class Enforcer extends ManagementEnforcer { * @return the users that has the role. */ public async getUsersForRole(name: string, domain?: string): Promise { - if (domain == null) { + if (domain === undefined) { return this.rm.getUsers(name); } else { return this.rm.getUsers(name, domain); @@ -133,7 +133,7 @@ export class Enforcer extends ManagementEnforcer { * @return succeeds or not. */ public async addRoleForUser(user: string, role: string, domain?: string): Promise { - if (domain == null) { + if (domain === undefined) { return this.addGroupingPolicy(user, role); } else { return this.addGroupingPolicy(user, role, domain); @@ -150,7 +150,7 @@ export class Enforcer extends ManagementEnforcer { * @return succeeds or not. */ public async deleteRoleForUser(user: string, role: string, domain?: string): Promise { - if (domain == null) { + if (domain === undefined) { return this.removeGroupingPolicy(user, role); } else { return this.removeGroupingPolicy(user, role, domain); @@ -166,7 +166,7 @@ export class Enforcer extends ManagementEnforcer { * @return succeeds or not. */ public async deleteRolesForUser(user: string, domain?: string): Promise { - if (domain == null) { + if (domain === undefined) { return this.removeFilteredGroupingPolicy(0, user); } else { return this.removeFilteredGroupingPolicy(0, user, '', domain); @@ -283,9 +283,9 @@ export class Enforcer extends ManagementEnforcer { const res = new Set(); const q = [name]; let n: string | undefined; - while ((n = q.shift()) != undefined) { + while ((n = q.shift()) !== undefined) { const role = await this.getRoleManager().getRoles(n, ...domain); - role.forEach(r => { + role.forEach((r) => { if (!res.has(r)) { res.add(r); q.push(r); @@ -349,7 +349,7 @@ export class Enforcer extends ManagementEnforcer { } } - return res.filter(n => !inherits.some(m => n === m)); + return res.filter((n) => !inherits.some((m) => n === m)); } } diff --git a/src/frontend.ts b/src/frontend.ts index 4554c294..7798a08f 100644 --- a/src/frontend.ts +++ b/src/frontend.ts @@ -29,29 +29,17 @@ export async function casbinJsGetPermissionForUser(e: Enforcer, user: string): P const m = e.getModel().model; let s = ''; s += '[request_definition]\n'; - s += `r = ${m - .get('r') - ?.get('r') - ?.value.replace(/_/g, '.')}\n`; + s += `r = ${m.get('r')?.get('r')?.value.replace(/_/g, '.')}\n`; s += '[policy_definition]\n'; - s += `p = ${m - .get('p') - ?.get('p') - ?.value.replace(/_/g, '.')}\n`; + s += `p = ${m.get('p')?.get('p')?.value.replace(/_/g, '.')}\n`; if (m.get('g')?.get('g') !== undefined) { s += '[role_definition]\n'; s += `g = ${m.get('g')?.get('g')?.value}\n`; } s += '[policy_effect]\n'; - s += `e = ${m - .get('e') - ?.get('e') - ?.value.replace(/_/g, '.')}\n`; + s += `e = ${m.get('e')?.get('e')?.value.replace(/_/g, '.')}\n`; s += '[matchers]\n'; - s += `m = ${m - .get('m') - ?.get('m') - ?.value.replace(/_/g, '.')}`; + s += `m = ${m.get('m')?.get('m')?.value.replace(/_/g, '.')}`; obj['m'] = s; obj['p'] = await e.getPolicy(); for (const arr of obj['p']) { diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index b86f5b56..53de7390 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -13,6 +13,7 @@ // limitations under the License. import { InternalEnforcer } from './internalEnforcer'; +import { MatchingFunction } from './model'; /** * ManagementEnforcer = InternalEnforcer + Management API. @@ -485,7 +486,7 @@ export class ManagementEnforcer extends InternalEnforcer { * @param name custom function name * @param func function */ - public async addFunction(name: string, func: any): Promise { + public async addFunction(name: string, func: MatchingFunction): Promise { this.fm.addFunction(name, func); } } diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index 5390e337..d32b4f80 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -14,6 +14,8 @@ import * as util from '../util'; +export type MatchingFunction = (...arg: any[]) => boolean | number | Promise | Promise; + // FunctionMap represents the collection of Function. export class FunctionMap { private functions: Map; @@ -41,7 +43,7 @@ export class FunctionMap { } // addFunction adds an expression function. - public addFunction(name: string, func: any): void { + public addFunction(name: string, func: MatchingFunction): void { if (!this.functions.get(name)) { this.functions.set(name, func); } diff --git a/src/model/model.ts b/src/model/model.ts index ed7cd5cd..f6a20c63 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -23,12 +23,12 @@ export const sectionNameMap: { [index: string]: string } = { p: 'policy_definition', g: 'role_definition', e: 'policy_effect', - m: 'matchers' + m: 'matchers', }; export enum PolicyOp { PolicyAdd, - PolicyRemove + PolicyRemove, } export const requiredSections = ['r', 'p', 'e', 'm']; @@ -81,7 +81,7 @@ export class Model { ast.value = value; if (sec === 'r' || sec === 'p') { - const tokens = value.split(',').map(n => n.trim()); + const tokens = value.split(',').map((n) => n.trim()); for (let i = 0; i < tokens.length; i++) { tokens[i] = key + '_' + tokens[i]; @@ -139,7 +139,7 @@ export class Model { } const ms: string[] = []; - requiredSections.forEach(n => { + requiredSections.forEach((n) => { if (!this.hasSection(n)) { ms.push(sectionNameMap[n]); } @@ -167,10 +167,7 @@ export class Model { // buildIncrementalRoleLinks provides incremental build the role inheritance relations. public async buildIncrementalRoleLinks(rm: rbac.RoleManager, op: PolicyOp, sec: string, ptype: string, rules: string[][]): Promise { if (sec === 'g') { - await this.model - .get(sec) - ?.get(ptype) - ?.buildIncrementalRoleLinks(rm, op, rules); + await this.model.get(sec)?.get(ptype)?.buildIncrementalRoleLinks(rm, op, rules); } } @@ -189,7 +186,7 @@ export class Model { public clearPolicy(): void { this.model.forEach((value, key) => { if (key === 'p' || key === 'g') { - value.forEach(ast => { + value.forEach((ast) => { ast.policy = []; }); } @@ -255,7 +252,7 @@ export class Model { if (!ast) { return false; } - ast.policy = ast.policy.filter(r => !util.arrayEquals(rule, r)); + ast.policy = ast.policy.filter((r) => !util.arrayEquals(rule, r)); return true; } @@ -319,7 +316,7 @@ export class Model { const res = []; const effects: string[][] = []; let bool = false; - if (fieldValues.length == 0) { + if (fieldValues.length === 0) { return [false, effects]; } const ast = this.model.get(sec)?.get(key); @@ -344,7 +341,7 @@ export class Model { } } - if (effects.length != 0) { + if (effects.length !== 0) { ast.policy = res; } @@ -385,7 +382,7 @@ export class Model { logPrint('Policy:'); this.model.forEach((map, key) => { if (key === 'p' || key === 'g') { - map.forEach(ast => { + map.forEach((ast) => { logPrint(`key, : ${ast.value}, : , ${ast.policy}`); }); } diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 7845ae57..11c88ca5 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -52,8 +52,8 @@ export class FileAdapter implements Adapter { if (!pList) { return false; } - pList.forEach(n => { - n.policy.forEach(m => { + pList.forEach((n) => { + n.policy.forEach((m) => { result += n.key + ', '; result += arrayToString(m); result += '\n'; @@ -64,8 +64,8 @@ export class FileAdapter implements Adapter { if (!gList) { return false; } - gList.forEach(n => { - n.policy.forEach(m => { + gList.forEach((n) => { + n.policy.forEach((m) => { result += n.key + ', '; result += arrayToString(m); result += '\n'; diff --git a/src/persist/helper.ts b/src/persist/helper.ts index f13350a3..5bb6f6ed 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -6,7 +6,7 @@ export class Helper { return; } - const tokens = line.split(',').map(n => n.trim()); + const tokens = line.split(',').map((n) => n.trim()); const key = tokens[0]; const sec = key.substring(0, 1); const item = model.model.get(sec); diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 7cdf4d2e..c0b91d78 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -44,14 +44,14 @@ class Role { } public addRole(role: Role): void { - if (this.roles.some(n => n.name === role.name)) { + if (this.roles.some((n) => n.name === role.name)) { return; } this.roles.push(role); } public deleteRole(role: Role): void { - this.roles = this.roles.filter(n => n.name !== role.name); + this.roles = this.roles.filter((n) => n.name !== role.name); } public hasRole(name: string, hierarchyLevel: number): boolean { @@ -71,7 +71,7 @@ class Role { } public hasDirectRole(name: string): boolean { - return this.roles.some(n => n.name === name); + return this.roles.some((n) => n.name === name); } public toString(): string { @@ -79,7 +79,7 @@ class Role { } public getRoles(): string[] { - return this.roles.map(n => n.name); + return this.roles.map((n) => n.name); } } @@ -192,10 +192,10 @@ export class DefaultRoleManager implements RoleManager { } const allRoles = new Roles(); - patternDomain.forEach(domain => { + patternDomain.forEach((domain) => { loadOrDefault(this.allDomains, domain, new Roles()).forEach((value, key) => { const role1 = allRoles.createRole(value.name, this.matchingFunc); - value.getRoles().forEach(n => { + value.getRoles().forEach((n) => { role1.addRole(allRoles.createRole(n, this.matchingFunc)); }); }); @@ -330,7 +330,7 @@ export class DefaultRoleManager implements RoleManager { return []; } - return [...allRoles.values()].filter(n => n.hasDirectRole(name)).map(n => n.name); + return [...allRoles.values()].filter((n) => n.hasDirectRole(name)).map((n) => n.name); } /** @@ -338,7 +338,7 @@ export class DefaultRoleManager implements RoleManager { */ public async printRoles(): Promise { if (getLogger().isEnable()) { - [...this.allDomains.values()].forEach(n => { + [...this.allDomains.values()].forEach((n) => { logPrint(n.toString()); }); } diff --git a/src/util/util.ts b/src/util/util.ts index d9c892c4..0eda1ac9 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -37,7 +37,7 @@ function arrayEquals(a: string[] = [], b: string[] = []): boolean { } for (let i = 0; i < aLen; i++) { - if (a[i] != b[i]) { + if (a[i] !== b[i]) { return false; } } @@ -48,7 +48,7 @@ function arrayEquals(a: string[] = [], b: string[] = []): boolean { function array2DEquals(a: string[][] = [], b: string[][] = []): boolean { const aLen = a.length; const bLen = a.length; - if (aLen != bLen) { + if (aLen !== bLen) { return false; } @@ -95,7 +95,7 @@ function readFile(path: string, encoding?: string): any { // writeFile return a promise for writeFile. function writeFile(path: string, file: string, encoding?: string): any { return new Promise((resolve, reject) => { - fs.writeFile(path, file, encoding || 'utf8', error => { + fs.writeFile(path, file, encoding || 'utf8', (error) => { if (error) { reject(error); } @@ -143,5 +143,5 @@ export { writeFile, hasEval, replaceEval, - getEvalValue + getEvalValue, }; diff --git a/test/config/config.test.ts b/test/config/config.test.ts index d2a50ac8..72593e48 100644 --- a/test/config/config.test.ts +++ b/test/config/config.test.ts @@ -3,30 +3,30 @@ import { Config } from '../../src'; const config = Config.newConfig('test/config/testini.ini'); describe('multi-line test', () => { - it('should config.get("multi1::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + it('should config.get("multi1::name") to equal r.sub==p.sub&&r.obj==p.obj', function () { expect(config.get('multi1::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); }); - it('should config.get("multi2::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + it('should config.get("multi2::name") to equal r.sub==p.sub&&r.obj==p.obj', function () { expect(config.get('multi2::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); }); - it('should config.get("multi3::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + it('should config.get("multi3::name") to equal r.sub==p.sub&&r.obj==p.obj', function () { expect(config.get('multi3::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); }); - it('should config.get("multi4::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + it('should config.get("multi4::name") to equal r.sub==p.sub&&r.obj==p.obj', function () { expect(config.get('multi4::name')).toEqual(''); }); - it('should config.get("multi5::name") to equal r.sub==p.sub&&r.obj==p.obj', function() { + it('should config.get("multi5::name") to equal r.sub==p.sub&&r.obj==p.obj', function () { expect(config.get('multi5::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); }); - it('should config.get("mysql::mysql.master.host") to equal 10.0.0.1', function() { + it('should config.get("mysql::mysql.master.host") to equal 10.0.0.1', function () { expect(config.get('mysql::mysql.master.host')).toEqual('10.0.0.1'); }); - it('should config.get("mysql::mysql.master.user") to equal root', function() { + it('should config.get("mysql::mysql.master.user") to equal root', function () { expect(config.get('mysql::mysql.master.user')).toEqual('root'); }); }); diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 0a9aa454..891b071a 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -259,7 +259,7 @@ test('TestReloadPolicy', async () => { ['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); }); diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 6599cc24..5cdfbb96 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -81,7 +81,7 @@ test('getPolicy', async () => { ['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); }); @@ -98,7 +98,7 @@ test('getNamedPolicy', async () => { ['alice', 'data1', 'read'], ['bob', 'data2', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); namedPolicy = await e.getNamedPolicy('p1'); testArray2DEquals(namedPolicy, []); @@ -153,7 +153,7 @@ test('addPolicies', async () => { ['jack', 'data4', 'read'], ['katy', 'data4', 'write'], ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'] + ['ham', 'data4', 'write'], ]; const added = await e.addPolicies(rules); expect(added).toBe(true); @@ -176,7 +176,7 @@ test('addNamedPolicies', async () => { ['jack', 'data4', 'read'], ['katy', 'data4', 'write'], ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'] + ['ham', 'data4', 'write'], ]; const added = await e.addNamedPolicies('p', rules); expect(added).toBe(true); @@ -199,7 +199,7 @@ test('removePolicies', async () => { ['jack', 'data4', 'read'], ['katy', 'data4', 'write'], ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'] + ['ham', 'data4', 'write'], ]; const added = await e.addPolicies(rules); expect(added).toBe(true); @@ -231,7 +231,7 @@ test('removeNamedPolicies', async () => { ['jack', 'data4', 'read'], ['katy', 'data4', 'write'], ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'] + ['ham', 'data4', 'write'], ]; const added = await e.addPolicies(rules); expect(added).toBe(true); @@ -269,7 +269,7 @@ test('addGroupingPolicies', async () => { e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], - ['jack', 'data5_admin'] + ['jack', 'data5_admin'], ]; const added = await e.addGroupingPolicies(groupingRules); expect(added).toBe(true); @@ -285,7 +285,7 @@ test('addNamedGroupingPolicies', async () => { e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], - ['jack', 'data5_admin'] + ['jack', 'data5_admin'], ]; const added = await e.addNamedGroupingPolicies('g', groupingRules); expect(added).toBe(true); @@ -301,7 +301,7 @@ test('removeGroupingPolicies', async () => { e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], - ['jack', 'data5_admin'] + ['jack', 'data5_admin'], ]; const added = await e.addGroupingPolicies(groupingRules); expect(added).toBe(true); @@ -324,7 +324,7 @@ test('removeNamedGroupingPolicies', async () => { e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], - ['jack', 'data5_admin'] + ['jack', 'data5_admin'], ]; const added = await e.addGroupingPolicies(groupingRules); expect(added).toBe(true); diff --git a/test/model/model.test.ts b/test/model/model.test.ts index 32901d26..43a34516 100644 --- a/test/model/model.test.ts +++ b/test/model/model.test.ts @@ -55,7 +55,7 @@ test('TestNewModelFromString', () => { expect(m !== null).toBe(true); }); -test('TestLoadModelFromConfig', done => { +test('TestLoadModelFromConfig', (done) => { let m = newModel(); m.loadModelFromConfig(basicConfig); @@ -71,7 +71,7 @@ test('TestLoadModelFromConfig', done => { } if (e instanceof Error) { - requiredSections.forEach(n => { + requiredSections.forEach((n) => { if (!e.message.includes(n)) { throw new Error(`section name: ${sectionNameMap[n]} should be in message`); } diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index ee38c83e..a0e45064 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -71,7 +71,7 @@ test('test getImplicitPermissionsForUser', async () => { ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); }); @@ -84,7 +84,7 @@ test('test deleteRolesForUser', async () => { ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); expect(await e.deleteRolesForUser('alice')).toEqual(true); expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true); @@ -103,18 +103,18 @@ test('test deleteRolesForUser with domain', async () => { expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['admin']); expect(await e.getImplicitPermissionsForUser('alice', 'domain1')).toEqual([ ['admin', 'domain1', 'data1', 'read'], - ['admin', 'domain1', 'data1', 'write'] + ['admin', 'domain1', 'data1', 'write'], ]); expect(await e.getImplicitPermissionsForUser('bob', 'domain2')).toEqual([ ['admin', 'domain2', 'data2', 'read'], - ['admin', 'domain2', 'data2', 'write'] + ['admin', 'domain2', 'data2', 'write'], ]); expect(await e.deleteRolesForUser('alice', 'domain1')).toEqual(true); expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual([]); expect(await e.getImplicitPermissionsForUser('alice', 'domain2')).toEqual([]); expect(await e.getImplicitPermissionsForUser('bob', 'domain2')).toEqual([ ['admin', 'domain2', 'data2', 'read'], - ['admin', 'domain2', 'data2', 'write'] + ['admin', 'domain2', 'data2', 'write'], ]); expect(await e.deleteRolesForUser('bob', 'domain1')).toEqual(false); expect(await e.getImplicitPermissionsForUser('alice', 'domain2')).toEqual([]); @@ -129,13 +129,13 @@ test('test deleteRole', async () => { ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); expect(await e.deleteRole('data1_admin')).toEqual(true); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ ['alice', 'data1', 'read'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); await e.deleteRole('data2_admin'); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read']]); @@ -149,7 +149,7 @@ test('test deleteUser', async () => { ['data1_admin', 'data1', 'read'], ['data1_admin', 'data1', 'write'], ['data2_admin', 'data2', 'read'], - ['data2_admin', 'data2', 'write'] + ['data2_admin', 'data2', 'write'], ]); await e.deleteUser('alice'); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([]); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..0a984588 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8418 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha1-Fo2ho26Q2miujUnA8bSMfGJJITo= + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/core@^7.1.0": + version "7.11.6" + resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.6.tgz?cache=0&sync_timestamp=1599146828594&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" + integrity sha1-OpRV3HOH/xusRXcGULwTugShVlE= + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.6" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.5" + "@babel/types" "^7.11.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.4.0": + version "7.11.6" + resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.11.6.tgz?cache=0&sync_timestamp=1599146830039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" + integrity sha1-uGiQD4GxY7TUZOokVFxhy6xNxiA= + dependencies: + "@babel/types" "^7.11.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo= + 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.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593522827189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I= + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4": + version "7.11.0" + resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.11.0.tgz?cache=0&sync_timestamp=1596144651395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha1-rmnIPYTugvS0L5bioJQQk1qPJt8= + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha1-TFxUvgS9MWcKc4J5fXW5+i5bViA= + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.11.0.tgz?cache=0&sync_timestamp=1596142927697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha1-sW8lAinkchGr3YSzS2RzfCqy01k= + 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.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522827576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha1-UNyWQT1ZT5lad5BZBbBYk813lnM= + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521148758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha1-L3WoMSadT2d95JmG3/WZJ1M883U= + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha1-1YXNk4jqBuYDHkzUS2cTy+rZ5s8= + 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-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha1-D1zNopRSd6KnotOoIeFTle3PNGE= + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz?cache=0&sync_timestamp=1596142927868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha1-+KSRJErPamdhWKxCBykRuoOtCZ8= + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593522720715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI= + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha1-Kr6w1yGv98Cpc3a54fb2XXpHUEQ= + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593522818552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha1-fRvf1ldTU4+r5sOFls23bZrGAUM= + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.4.3": + version "7.11.5" + resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha1-x/9jA99xCA7HpPW4wAPFjxz1EDc= + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz?cache=0&sync_timestamp=1578952449003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/runtime@^7.0.0": + version "7.11.2" + resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.2.tgz?cache=0&sync_timestamp=1596637824771&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha1-9UnBPHVMxAuHZEufqfCaapX+BzY= + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.4.0": + version "7.10.4" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha1-MlGZbEIA68cdGo/EBfupQPNrong= + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.4.3": + version "7.11.5" + resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha1-vnd7k7UY62127i4eodFD2qEeYcM= + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.4.0": + version "7.11.5" + resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha1-2d5XfQElLXfGgAzuA57mT691Zi0= + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.npm.taobao.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha1-+GSuhQBND8q29QvpFBxNo2jRZWo= + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@commitlint/execute-rule@^11.0.0": + version "11.0.0" + resolved "https://registry.npm.taobao.org/@commitlint/execute-rule/download/@commitlint/execute-rule-11.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40commitlint%2Fexecute-rule%2Fdownload%2F%40commitlint%2Fexecute-rule-11.0.0.tgz#3ed60ab7a33019e58d90e2d891b75d7df77b4b4d" + integrity sha1-PtYKt6MwGeWNkOLYkbddffd7S00= + +"@commitlint/load@>6.1.1": + version "11.0.0" + resolved "https://registry.npm.taobao.org/@commitlint/load/download/@commitlint/load-11.0.0.tgz?cache=0&sync_timestamp=1599988541031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40commitlint%2Fload%2Fdownload%2F%40commitlint%2Fload-11.0.0.tgz#f736562f0ffa7e773f8808fea93319042ee18211" + integrity sha1-9zZWLw/6fnc/iAj+qTMZBC7hghE= + dependencies: + "@commitlint/execute-rule" "^11.0.0" + "@commitlint/resolve-extends" "^11.0.0" + "@commitlint/types" "^11.0.0" + chalk "4.1.0" + cosmiconfig "^7.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + +"@commitlint/resolve-extends@^11.0.0": + version "11.0.0" + resolved "https://registry.npm.taobao.org/@commitlint/resolve-extends/download/@commitlint/resolve-extends-11.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40commitlint%2Fresolve-extends%2Fdownload%2F%40commitlint%2Fresolve-extends-11.0.0.tgz#158ecbe27d4a2a51d426111a01478e216fbb1036" + integrity sha1-FY7L4n1KKlHUJhEaAUeOIW+7EDY= + dependencies: + import-fresh "^3.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/types@^11.0.0": + version "11.0.0" + resolved "https://registry.npm.taobao.org/@commitlint/types/download/@commitlint/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe" + integrity sha1-cZzwX8wau2UzYQouD13R5h6sFP4= + +"@eslint/eslintrc@^0.1.3": + version "0.1.3" + resolved "https://registry.npm.taobao.org/@eslint/eslintrc/download/@eslint/eslintrc-0.1.3.tgz?cache=0&sync_timestamp=1598987645723&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40eslint%2Feslintrc%2Fdownload%2F%40eslint%2Feslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" + integrity sha1-fRorI1hVLMBINMCXm9QnU2LjcIU= + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@iarna/cli@^1.2.0": + version "1.2.0" + resolved "https://registry.npm.taobao.org/@iarna/cli/download/@iarna/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" + integrity sha1-D3r16FGv6JUQRYPEygc3eoCU1kE= + dependencies: + signal-exit "^3.0.2" + update-notifier "^2.2.0" + yargs "^8.0.2" + +"@jest/console@^24.7.1", "@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/console/download/@jest/console-24.9.0.tgz?cache=0&sync_timestamp=1601981693425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fconsole%2Fdownload%2F%40jest%2Fconsole-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha1-ebG8Bvt0qM+wHL3t+UVYSxuXB/A= + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/core/download/@jest/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha1-LOzNC5MYH5xIUOdPKprUPTUTacQ= + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + realpath-native "^1.1.0" + rimraf "^2.5.4" + slash "^2.0.0" + strip-ansi "^5.0.0" + +"@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/environment/download/@jest/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha1-IeOvotZcBYbL1svv4gi6+t5Eqxg= + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/fake-timers/download/@jest/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha1-uj5r8O7NCaY2BJiWQ00wZjZUDJM= + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/reporters/download/@jest/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha1-hmYO/44rlmHQQqjpigKLjWMaW0M= + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.1" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + node-notifier "^5.4.2" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/source-map/download/@jest/source-map-24.9.0.tgz?cache=0&sync_timestamp=1601890138928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fsource-map%2Fdownload%2F%40jest%2Fsource-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha1-DiY6lEML5LQdpoPMwea//ioZFxQ= + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/test-result/download/@jest/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha1-EXluiqnb+I6gJXV7MVJZWtBroMo= + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/test-sequencer/download/@jest/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha1-+PM081tiWk8vNV8v5+YDba0uazE= + dependencies: + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/transform/download/@jest/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha1-SuJ2iyllU/rasJ6ewRlUPJCxbFY= + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.9.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" + micromatch "^3.1.10" + pirates "^4.0.1" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.npm.taobao.org/@jest/types/download/@jest/types-24.9.0.tgz?cache=0&sync_timestamp=1601981686839&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Ftypes%2Fdownload%2F%40jest%2Ftypes-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha1-Y8smy3UA0Gnlo4lEGnxqtekJ/Fk= + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha1-Olgr21OATGum0UZXnEblITDPSjs= + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M= + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY= + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@octokit/auth-token@^2.4.0": + version "2.4.2" + resolved "https://registry.npm.taobao.org/@octokit/auth-token/download/@octokit/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" + integrity sha1-ENCul5sQD6a3L6Do5j4n5tDb/4o= + dependencies: + "@octokit/types" "^5.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.8" + resolved "https://registry.npm.taobao.org/@octokit/endpoint/download/@octokit/endpoint-6.0.8.tgz#91b07e236fdb69929c678c6439f7a560dc6058ac" + integrity sha1-kbB+I2/baZKcZ4xkOfelYNxgWKw= + dependencies: + "@octokit/types" "^5.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.npm.taobao.org/@octokit/plugin-paginate-rest/download/@octokit/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha1-AEFwrPjCvlNauiZyeGfWkve0iPw= + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.0" + resolved "https://registry.npm.taobao.org/@octokit/plugin-request-log/download/@octokit/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" + integrity sha1-7vh6QxMA9hSMOaf3X4z+shiyVH4= + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.npm.taobao.org/@octokit/plugin-rest-endpoint-methods/download/@octokit/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha1-Mojs9UgfaMSU3QYC/BVAeln69h4= + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha1-7eBxTHc/MjR1dsJWSdwBOuazGAE= + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^2.0.0": + version "2.0.2" + resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" + integrity sha1-Dna4P12P3aHbmQJ+pfYXwua6ntA= + dependencies: + "@octokit/types" "^5.0.1" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.4.9" + resolved "https://registry.npm.taobao.org/@octokit/request/download/@octokit/request-5.4.9.tgz#0a46f11b82351b3416d3157261ad9b1558c43365" + integrity sha1-CkbxG4I1GzQW0xVyYa2bFVjEM2U= + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^5.0.0" + deprecation "^2.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + once "^1.4.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.27.0": + version "16.43.2" + resolved "https://registry.npm.taobao.org/@octokit/rest/download/@octokit/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" + integrity sha1-xTQm8eHRBE3ulnAj4yecUJk92Rs= + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.16.2" + resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-2.16.2.tgz?cache=0&sync_timestamp=1600028517947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Ftypes%2Fdownload%2F%40octokit%2Ftypes-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" + integrity sha1-TF+No8b+zz2hgRrvZ4/aA+2sNdI= + dependencies: + "@types/node" ">= 8" + +"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": + version "5.5.0" + resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-5.5.0.tgz?cache=0&sync_timestamp=1600028517947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Ftypes%2Fdownload%2F%40octokit%2Ftypes-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" + integrity sha1-5fBujbISRsoQKqKERM2xOuF6E5s= + dependencies: + "@types/node" ">= 8" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.1" + resolved "https://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha1-ohEXsZ7pvnDDeewYd1N+8uHGMwE= + dependencies: + any-observable "^0.3.0" + +"@semantic-release/changelog@^3.0.6": + version "3.0.6" + resolved "https://registry.npm.taobao.org/@semantic-release/changelog/download/@semantic-release/changelog-3.0.6.tgz#9d68d68bf732cbba1034c028bb6720091f783b2a" + integrity sha1-nWjWi/cyy7oQNMAou2cgCR94Oyo= + dependencies: + "@semantic-release/error" "^2.1.0" + aggregate-error "^3.0.0" + fs-extra "^8.0.0" + lodash "^4.17.4" + +"@semantic-release/commit-analyzer@^6.1.0": + version "6.3.3" + resolved "https://registry.npm.taobao.org/@semantic-release/commit-analyzer/download/@semantic-release/commit-analyzer-6.3.3.tgz#885f7e46e2f0aef23a23be0904dbf18d6ece45ca" + integrity sha1-iF9+RuLwrvI6I74JBNvxjW7ORco= + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.0.7" + debug "^4.0.0" + import-from "^3.0.0" + lodash "^4.17.4" + +"@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": + version "2.2.0" + resolved "https://registry.npm.taobao.org/@semantic-release/error/download/@semantic-release/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" + integrity sha1-7p1aCcmWnq3h7IZHdq7aXFzdu/A= + +"@semantic-release/git@^7.0.18": + version "7.0.18" + resolved "https://registry.npm.taobao.org/@semantic-release/git/download/@semantic-release/git-7.0.18.tgz#f37c076bc094762cb343dab49ab893d31de961e8" + integrity sha1-83wHa8CUdiyzQ9q0mriT0x3pYeg= + dependencies: + "@semantic-release/error" "^2.1.0" + aggregate-error "^3.0.0" + debug "^4.0.0" + dir-glob "^3.0.0" + execa "^3.2.0" + fs-extra "^8.0.0" + globby "^10.0.0" + lodash "^4.17.4" + micromatch "^4.0.0" + p-reduce "^2.0.0" + +"@semantic-release/github@^5.1.0": + version "5.5.8" + resolved "https://registry.npm.taobao.org/@semantic-release/github/download/@semantic-release/github-5.5.8.tgz#2c16d212ca057ba0b0553b6eb62ff0949cfbca6a" + integrity sha1-LBbSEsoFe6CwVTtuti/wlJz7ymo= + dependencies: + "@octokit/rest" "^16.27.0" + "@semantic-release/error" "^2.2.0" + aggregate-error "^3.0.0" + bottleneck "^2.18.1" + debug "^4.0.0" + dir-glob "^3.0.0" + fs-extra "^8.0.0" + globby "^10.0.0" + http-proxy-agent "^3.0.0" + https-proxy-agent "^4.0.0" + issue-parser "^5.0.0" + lodash "^4.17.4" + mime "^2.4.3" + p-filter "^2.0.0" + p-retry "^4.0.0" + url-join "^4.0.0" + +"@semantic-release/npm@^5.0.5": + version "5.3.5" + resolved "https://registry.npm.taobao.org/@semantic-release/npm/download/@semantic-release/npm-5.3.5.tgz#4a83952056d32e1401e1078c3910a159afc0cba8" + integrity sha1-SoOVIFbTLhQB4QeMORChWa/Ay6g= + dependencies: + "@semantic-release/error" "^2.2.0" + aggregate-error "^3.0.0" + execa "^3.2.0" + fs-extra "^8.0.0" + lodash "^4.17.15" + nerf-dart "^1.0.0" + normalize-url "^4.0.0" + npm "^6.10.3" + rc "^1.2.8" + read-pkg "^5.0.0" + registry-auth-token "^4.0.0" + tempy "^0.3.0" + +"@semantic-release/release-notes-generator@^7.1.2": + version "7.3.5" + resolved "https://registry.npm.taobao.org/@semantic-release/release-notes-generator/download/@semantic-release/release-notes-generator-7.3.5.tgz#ed0941d5b594f18fa1d2667493c03e811f97c0ff" + integrity sha1-7QlB1bWU8Y+h0mZ0k8A+gR+XwP8= + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-changelog-writer "^4.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.0.0" + debug "^4.0.0" + get-stream "^5.0.0" + import-from "^3.0.0" + into-stream "^5.0.0" + lodash "^4.17.4" + read-pkg-up "^7.0.0" + +"@types/babel__core@^7.1.0": + version "7.1.10" + resolved "https://registry.npm.taobao.org/@types/babel__core/download/@types/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" + integrity sha1-ylj8GV3Zc0535XxvLfVlYjY2q0A= + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.npm.taobao.org/@types/babel__generator/download/@types/babel__generator-7.6.2.tgz?cache=0&sync_timestamp=1601076676593&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__generator%2Fdownload%2F%40types%2Fbabel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha1-89cReOGHhY98ReMDgPjxt0FaEtg= + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.3" + resolved "https://registry.npm.taobao.org/@types/babel__template/download/@types/babel__template-7.0.3.tgz#b8aaeba0a45caca7b56a5de9459872dde3727214" + integrity sha1-uKrroKRcrKe1al3pRZhy3eNychQ= + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.15" + resolved "https://registry.npm.taobao.org/@types/babel__traverse/download/@types/babel__traverse-7.0.15.tgz?cache=0&sync_timestamp=1601076676740&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__traverse%2Fdownload%2F%40types%2Fbabel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" + integrity sha1-255COJMetp74qrCtZSPU1MqjnQM= + dependencies: + "@babel/types" "^7.3.0" + +"@types/braces@*": + version "3.0.0" + resolved "https://registry.npm.taobao.org/@types/braces/download/@types/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" + integrity sha1-faHA1E/xx+tmCjbsB46mG6frQss= + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha1-5rqA82t9qtLGhazZJmOC5omFwYM= + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/ip@^0.0.31": + version "0.0.31" + resolved "https://registry.npm.taobao.org/@types/ip/download/@types/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" + integrity sha1-o2OYnnLdEbsh+TLW/pa9aoWyt0s= + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.3" + resolved "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha1-S6jdtyAiH0MuRDvV+RF/0iz9R2I= + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npm.taobao.org/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY= + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.npm.taobao.org/@types/istanbul-reports/download/@types/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha1-6HXMaJ5HvOVJ7IHz315vbxHPrrI= + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest@^24.0.11": + version "24.9.1" + resolved "https://registry.npm.taobao.org/@types/jest/download/@types/jest-24.9.1.tgz?cache=0&sync_timestamp=1600269796422&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjest%2Fdownload%2F%40types%2Fjest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" + integrity sha1-Arr5Vzx48bmXSl82d4s2aqd71TQ= + dependencies: + jest-diff "^24.3.0" + +"@types/json-schema@^7.0.3": + version "7.0.6" + resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA= + +"@types/lodash@^4.14.113": + version "4.14.161" + resolved "https://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.161.tgz?cache=0&sync_timestamp=1598664997598&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz#a21ca0777dabc6e4f44f3d07f37b765f54188b18" + integrity sha1-ohygd32rxuT0Tz0H83t2X1QYixg= + +"@types/micromatch@^4.0.1": + version "4.0.1" + resolved "https://registry.npm.taobao.org/@types/micromatch/download/@types/micromatch-4.0.1.tgz?cache=0&sync_timestamp=1596841637355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fmicromatch%2Fdownload%2F%40types%2Fmicromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" + integrity sha1-k4FEndZZ/Dgj/SpBkM6syYUIO8c= + dependencies: + "@types/braces" "*" + +"@types/minimatch@*", "@types/minimatch@^3.0.3": + version "3.0.3" + resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&sync_timestamp=1596839015387&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0= + +"@types/minimist@^1.2.0": + version "1.2.0" + resolved "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" + integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= + +"@types/node@*", "@types/node@>= 8": + version "14.11.5" + resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-14.11.5.tgz?cache=0&sync_timestamp=1601963426754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.11.5.tgz#fecad41c041cae7f2404ad4b2d0742fdb628b305" + integrity sha1-/srUHAQcrn8kBK1LLQdC/bYoswU= + +"@types/node@^10.5.3": + version "10.17.37" + resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.37.tgz?cache=0&sync_timestamp=1601963426754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.37.tgz#40d03db879993799c3819e298b003f055e8ecafe" + integrity sha1-QNA9uHmZN5nDgZ4piwA/BV6Oyv4= + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz?cache=0&sync_timestamp=1596839336899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4= + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + +"@types/retry@^0.12.0": + version "0.12.0" + resolved "https://registry.npm.taobao.org/@types/retry/download/@types/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha1-KzXsz87n04zXKtmSMvvVi/+zyE0= + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.npm.taobao.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz?cache=0&sync_timestamp=1600734823233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fstack-utils%2Fdownload%2F%40types%2Fstack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha1-CoUdO9lkmPolwzq3J47TvWXwbD4= + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz?cache=0&sync_timestamp=1596842545661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha1-yz+fdBhp4gzOMw/765JxWQSDiC0= + +"@types/yargs@^13.0.0": + version "13.0.11" + resolved "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-13.0.11.tgz?cache=0&sync_timestamp=1600887198322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" + integrity sha1-3vLwyT5L3yxh1+NImbF+NL4o07E= + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^4.4.0": + version "4.4.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.4.0.tgz#0321684dd2b902c89128405cf0385e9fe8561934" + integrity sha1-AyFoTdK5AsiRKEBc8Dhen+hWGTQ= + dependencies: + "@typescript-eslint/experimental-utils" "4.4.0" + "@typescript-eslint/scope-manager" "4.4.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.4.0": + version "4.4.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.4.0.tgz?cache=0&sync_timestamp=1602005693374&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-4.4.0.tgz#62a05d3f543b8fc5dec4982830618ea4d030e1a9" + integrity sha1-YqBdP1Q7j8XexJgoMGGOpNAw4ak= + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.4.0" + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/typescript-estree" "4.4.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.4.0": + version "4.4.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-4.4.0.tgz?cache=0&sync_timestamp=1602005696227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-4.4.0.tgz#65974db9a75f23b036f17b37e959b5f99b659ec0" + integrity sha1-ZZdNuadfI7A28Xs36Vm1+ZtlnsA= + dependencies: + "@typescript-eslint/scope-manager" "4.4.0" + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/typescript-estree" "4.4.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.4.0": + version "4.4.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.4.0.tgz#2f3dd27692a12cc9a046a90ba6a9d8cb7731190a" + integrity sha1-Lz3SdpKhLMmgRqkLpqnYy3cxGQo= + dependencies: + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/visitor-keys" "4.4.0" + +"@typescript-eslint/types@4.4.0": + version "4.4.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/types/download/@typescript-eslint/types-4.4.0.tgz?cache=0&sync_timestamp=1602005758566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-4.4.0.tgz#63440ef87a54da7399a13bdd4b82060776e9e621" + integrity sha1-Y0QO+HpU2nOZoTvdS4IGB3bp5iE= + +"@typescript-eslint/typescript-estree@4.4.0": + version "4.4.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.4.0.tgz#16a2df7c16710ddd5406b32b86b9c1124b1ca526" + integrity sha1-FqLffBZxDd1UBrMrhrnBEkscpSY= + dependencies: + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/visitor-keys" "4.4.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.4.0": + version "4.4.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.4.0.tgz#0a9118344082f14c0f051342a74b42dfdb012640" + integrity sha1-CpEYNECC8UwPBRNCp0tC39sBJkA= + dependencies: + "@typescript-eslint/types" "4.4.0" + eslint-visitor-keys "^2.0.0" + +JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz?cache=0&sync_timestamp=1589682277271&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2FJSONStream%2Fdownload%2FJSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha1-MgjB8I06TZkmGrZPkjArwV4RHKA= + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.0: + version "2.0.5" + resolved "https://registry.npm.taobao.org/abab/download/abab-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fabab%2Fdownload%2Fabab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o= + +abbrev@1, abbrev@~1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= + +acorn-globals@^4.1.0: + version "4.3.4" + resolved "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-globals%2Fdownload%2Facorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha1-n6GSat3BHJcwjE5m163Q1Awycuc= + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-jsx@^5.2.0: + version "5.3.1" + resolved "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz?cache=0&sync_timestamp=1599499085730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns= + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.2.0.tgz?cache=0&sync_timestamp=1597235853605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha1-Ejy487hMIXHx9/slJhWxx4prGow= + +acorn@^5.5.3: + version "5.7.4" + resolved "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha1-Po2KmUfQWZoXltECJddDL0pKz14= + +acorn@^6.0.1: + version "6.4.2" + resolved "https://registry.npm.taobao.org/acorn/download/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha1-NYZv1xBSjpLeEM8GAWSY5H454eY= + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz?cache=0&sync_timestamp=1593732673731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4= + dependencies: + es6-promisify "^5.0.0" + +agent-base@5: + version "5.1.1" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-5.1.1.tgz?cache=0&sync_timestamp=1593732673731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw= + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz?cache=0&sync_timestamp=1593732673731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk= + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.5.2.tgz?cache=0&sync_timestamp=1592193910607&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagentkeepalive%2Fdownload%2Fagentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c= + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo= + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.5" + resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha1-GbDouuj0duW6ZmMAOHd1+xoApNo= + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha1-y7muJWv3UK8eqzRPIpqif+lLo0g= + +ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&sync_timestamp=1583072748255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= + dependencies: + color-convert "^2.0.1" + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/ansicolors/download/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.npm.taobao.org/ansistyles/download/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha1-r5M0deWAamfQ198JDdXovvZdEZs= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: + version "1.2.0" + resolved "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + +"aproba@^1.1.2 || 2", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/aproba/download/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha1-UlILiuW1aSFbNU78DKo/4eRaitw= + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= + dependencies: + sprintf-js "~1.0.2" + +argv-formatter@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/argv-formatter/download/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" + integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/array-differ/download/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha1-PLs9DzFoEOr8xHYkc0I31q7krms= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/array-ify/download/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/arrify/download/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo= + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY= + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/atob-lite/download/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + +await-lock@^2.0.1: + version "2.1.0" + resolved "https://registry.npm.taobao.org/await-lock/download/await-lock-2.1.0.tgz#bc78c51d229a34d5d90965a1c94770e772c6145e" + integrity sha1-vHjFHSKaNNXZCWWhyUdw53LGFF4= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.1" + resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.10.1.tgz?cache=0&sync_timestamp=1597237013644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg= + +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/babel-jest/download/babel-jest-24.9.0.tgz?cache=0&sync_timestamp=1601981648682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-jest%2Fdownload%2Fbabel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ= + dependencies: + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.9.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-plugin-istanbul@^5.1.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" + integrity sha1-30reg9iXqS3wacTZolzyZxKTyFQ= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" + +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-24.9.0.tgz?cache=0&sync_timestamp=1601890138307&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-jest-hoist%2Fdownload%2Fbabel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha1-T4NwketAfgFEfIhDy+xUbQAC11Y= + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-24.9.0.tgz?cache=0&sync_timestamp=1601890121191&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-preset-jest%2Fdownload%2Fbabel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha1-GStSHiIX+x0fZ89z9wwzZlCtPNw= + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.9.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/before-after-hook/download/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU= + +bin-links@^1.1.2, bin-links@^1.1.8: + version "1.1.8" + resolved "https://registry.npm.taobao.org/bin-links/download/bin-links-1.1.8.tgz?cache=0&sync_timestamp=1601491332458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbin-links%2Fdownload%2Fbin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228" + integrity sha1-vTmq2rXcS9rCIqB99brxr3RbIig= + dependencies: + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha1-EDU8npRTNLwFEabZCzj7x8nFBN8= + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= + +bottleneck@^2.18.1: + version "2.19.5" + resolved "https://registry.npm.taobao.org/bottleneck/download/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha1-XfC5D1n9R2VuvmPHiphBkgXK3ZE= + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898201980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY= + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz?cache=0&sync_timestamp=1596458151883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowser-resolve%2Fdownload%2Fbrowser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY= + dependencies: + resolve "1.1.7" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.npm.taobao.org/bs-logger/download/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha1-6302UwenLPl0zGzadraDVK0za9g= + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/bser/download/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU= + dependencies: + node-int64 "^0.4.0" + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/btoa-lite/download/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/byline/download/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/byte-size/download/byte-size-5.0.1.tgz?cache=0&sync_timestamp=1590576785550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbyte-size%2Fdownload%2Fbyte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha1-S2UQOaXs2Wdn5xo9ftOA5IvtQZE= + +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1594427999421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw= + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cachedir@2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/cachedir/download/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" + integrity sha1-Ga+kMF4F155BdWaILgyPlg9i/w4= + +call-limit@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/call-limit/download/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" + integrity sha1-7xXyZw2z8ZklV+LZZavEWebjWNQ= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1574395542397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A= + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha1-+5U7+uvreB9iiYI52rtCbQilCaQ= + dependencies: + rsvp "^4.8.4" + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha1-psC74fOPOqC5Ijjstv9Cw0TUE10= + +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/cardinal/download/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@4.1.0, chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs= + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc= + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y= + +cidr-regex@^2.0.10: + version "2.0.10" + resolved "https://registry.npm.taobao.org/cidr-regex/download/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" + integrity sha1-rxOHi9StcE3nfW3IAHmTWLOvpw0= + dependencies: + ip-regex "^2.1.0" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035220754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz?cache=0&sync_timestamp=1598866401325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-boxes%2Fdownload%2Fcli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.npm.taobao.org/cli-columns/download/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= + dependencies: + string-width "^2.0.0" + strip-ansi "^3.0.1" + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-table3@^0.5.0, cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.npm.taobao.org/cli-table3/download/cli-table3-0.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-table3%2Fdownload%2Fcli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha1-AlI3LZTfxA29jfBgBfSPMfZW8gI= + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/cli-table/download/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= + dependencies: + colors "1.0.3" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha1-sEM9C06chH7xiGik7xb9X8gnHEg= + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1597607836462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1597607836462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1597607836462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE= + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.npm.taobao.org/cmd-shim/download/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha1-LDUjjT3zfZjs3X1fa43Gshytx8s= + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/colors/download/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= + +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.npm.taobao.org/columnify/download/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= + dependencies: + delayed-stream "~1.0.0" + +commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: + version "2.20.3" + resolved "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM= + +commitizen@^4.0.3: + version "4.2.1" + resolved "https://registry.npm.taobao.org/commitizen/download/commitizen-4.2.1.tgz#3b098b16c6b1a37f0d129018dff6751b20cd3103" + integrity sha1-OwmLFsaxo38NEpAY3/Z1GyDNMQM= + dependencies: + cachedir "2.2.0" + cz-conventional-changelog "3.2.0" + dedent "0.7.0" + detect-indent "6.0.0" + find-node-modules "2.0.0" + find-root "1.1.0" + fs-extra "8.1.0" + glob "7.1.4" + inquirer "6.5.2" + is-utf8 "^0.2.1" + lodash "^4.17.20" + minimist "1.2.5" + strip-bom "4.0.0" + strip-json-comments "3.0.1" + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/compare-func/download/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha1-+2XnXtvd/S5WhVTotbBf/3pR/LM= + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha1-D96NCRIA616AjK8l/mGMAvSOTvo= + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.npm.taobao.org/configstore/download/configstore-3.1.5.tgz?cache=0&sync_timestamp=1597607673944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconfigstore%2Fdownload%2Fconfigstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha1-6a8zH63BTavVRNPn523ERqCaUw8= + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +conventional-changelog-angular@^5.0.0: + version "5.0.11" + resolved "https://registry.npm.taobao.org/conventional-changelog-angular/download/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb" + integrity sha1-maPKFuSlMF4MLC+uPvdP12Mfw/s= + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-writer@^4.0.0: + version "4.0.17" + resolved "https://registry.npm.taobao.org/conventional-changelog-writer/download/conventional-changelog-writer-4.0.17.tgz?cache=0&sync_timestamp=1596849078623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-changelog-writer%2Fdownload%2Fconventional-changelog-writer-4.0.17.tgz#4753aaa138bf5aa59c0b274cb5937efcd2722e21" + integrity sha1-R1OqoTi/WqWcCydMtZN+/NJyLiE= + dependencies: + compare-func "^2.0.0" + conventional-commits-filter "^2.0.6" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^7.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^3.0.0" + +conventional-commit-types@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/conventional-commit-types/download/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha1-fJIU5Y6uk+hd1m2/uv5+T/+iNls= + +conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/conventional-commits-filter/download/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c" + integrity sha1-CTXhJAxcp2mDKa/+4bakbTMyTEw= + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: + version "3.1.0" + resolved "https://registry.npm.taobao.org/conventional-commits-parser/download/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4" + integrity sha1-EBQGc9Xn71VyYzeRRWxdA7aei+Q= + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^7.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + trim-off-newlines "^1.0.0" + +convert-source-map@^1.4.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= + dependencies: + safe-buffer "~5.1.1" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.2.0: + version "5.2.1" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo= + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-7.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha1-75tE13OVnK5j3ezRIt4jhTtg+NM= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +coveralls@^3.0.2: + version "3.1.0" + resolved "https://registry.npm.taobao.org/coveralls/download/coveralls-3.1.0.tgz?cache=0&sync_timestamp=1587767968172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcoveralls%2Fdownload%2Fcoveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" + integrity sha1-E8dU1eei3YtE/lJp4hyjlPtNYVs= + dependencies: + js-yaml "^3.13.1" + lcov-parse "^1.0.0" + log-driver "^1.2.7" + minimist "^1.2.5" + request "^2.88.2" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz?cache=0&sync_timestamp=1599137690451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.8" + resolved "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1573719337707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o= + +cssstyle@^1.0.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/cssstyle/download/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha1-nTEyginTxWXGHlhrAgQaKPzNzPE= + dependencies: + cssom "0.3.x" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +cz-conventional-changelog@3.2.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477" + integrity sha1-au8fiS1kETND1+RVUpCJrJ8g5Hc= + dependencies: + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^3.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +cz-conventional-changelog@^3.2.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" + integrity sha1-kkaUfJBAQUmz/iz37pGsrTt9ItI= + dependencies: + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^3.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073381998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4= + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.npm.taobao.org/date-fns/download/date-fns-1.30.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw= + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.npm.taobao.org/dateformat/download/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha1-puN0maTZqc+F71hyBE1ikByYia4= + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E= + dependencies: + ms "2.1.2" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= + dependencies: + ms "^2.1.1" + +debuglog@*, debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@0.7.0, dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/del/download/del-3.0.0.tgz?cache=0&sync_timestamp=1601076936089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npm.taobao.org/deprecation/download/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/detect-file/download/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha1-Cr0PVJ9p/GZZolT+lnhhhrb1KP0= + +detect-indent@~5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +dezalgo@^1.0.0, dezalgo@~1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-24.9.0.tgz?cache=0&sync_timestamp=1601890138646&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff-sequences%2Fdownload%2Fdiff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha1-VxXWJE4qpl9Iu6C8ly2wsLEelbU= + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz?cache=0&sync_timestamp=1578918306878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0= + +dir-glob@^3.0.0, dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= + dependencies: + esutils "^2.0.2" + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA= + dependencies: + webidl-conversions "^4.0.2" + +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.1.tgz?cache=0&sync_timestamp=1602107326908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha1-RYhBlKcfws2nHLtLzrOk3S9DO6Q= + dependencies: + is-obj "^1.0.0" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1602107326908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= + dependencies: + is-obj "^2.0.0" + +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-5.0.1.tgz?cache=0&sync_timestamp=1571190782798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha1-pTF0Wb09eauIz/bkQFemo/ux/O8= + +duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/editor/download/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.npm.taobao.org/encoding/download/encoding-0.1.13.tgz?cache=0&sync_timestamp=1594362877372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fencoding%2Fdownload%2Fencoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha1-VldK/deR9UqOmyeFwFgqLSYhD6k= + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693195602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00= + dependencies: + ansi-colors "^4.1.1" + +env-ci@^4.0.0: + version "4.5.2" + resolved "https://registry.npm.taobao.org/env-ci/download/env-ci-4.5.2.tgz#40b08825dcf4ed5b2cddd3d638190571cf96347a" + integrity sha1-QLCIJdz07Vss3dPWOBkFcc+WNHo= + dependencies: + execa "^3.2.0" + java-properties "^1.0.0" + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM= + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz?cache=0&sync_timestamp=1592481014549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferr-code%2Fdownload%2Ferr-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@~0.1.7: + version "0.1.7" + resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.7" + resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw= + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0: + version "1.18.0-next.1" + resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo= + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.9.1: + version "1.14.3" + resolved "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM= + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@^6.12.0: + version "6.12.0" + resolved "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.12.0.tgz?cache=0&sync_timestamp=1601053002831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.12.0.tgz#9eb2bccff727db1c52104f0b49e87ea46605a0d2" + integrity sha1-nrK8z/cn2xxSEE8LSeh+pGYFoNI= + dependencies: + get-stdin "^6.0.0" + +eslint-plugin-prettier@^3.1.4: + version "3.1.4" + resolved "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" + integrity sha1-Foq0MVTi6lfbmSos0JfIKBcfdcI= + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599933677754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw= + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1592222030474&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc= + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-2.0.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha1-If3I+82ceVzAMh8FY3AglXUVEag= + +eslint@^7.10.0: + version "7.10.0" + resolved "https://registry.npm.taobao.org/eslint/download/eslint-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9" + integrity sha1-SU7bPkdQ+3kRM8o3nnhqj2SMcrk= + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.1.3" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^1.3.0" + espree "^7.3.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.npm.taobao.org/espree/download/espree-7.3.0.tgz?cache=0&sync_timestamp=1598127498738&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha1-3DBDfPZ5R89XYSHr14DxXurHI0g= + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= + +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc= + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha1-eteWTWeauyi+5yzsY3WLHF0smSE= + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA= + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.npm.taobao.org/exec-sh/download/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha1-OgGM61JsxvbfK7UEsr/o46STTsU= + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.2.0: + version "3.4.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha1-wI7UVQ72XYWPrCaf/IVyRG8364k= + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/execa/download/execa-4.0.3.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha1-CjTau61tZhAL1vLFdshmlAPzF/I= + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/expand-tilde/download/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/expect/download/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha1-t1FltIFwdPpKFXeU9G/p8boVtso= + dependencies: + "@jest/types" "^24.9.0" + ansi-styles "^3.2.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" + +expression-eval@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/expression-eval/download/expression-eval-2.1.0.tgz#422915caa46140a7c5b5f248650dea8bf8236e62" + integrity sha1-QikVyqRhQKfFtfJIZQ3qi/gjbmI= + dependencies: + jsep "^0.3.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599675178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM= + +fast-glob@^3.0.3, fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592290280465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha1-0grvv5lXk4Pn88xmUpFYybmFVNM= + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz?cache=0&sync_timestamp=1595428000133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-levenshtein%2Fdownload%2Ffast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.8.0" + resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha1-VQ4fn1m7xl/hhctqm02VNXEH9IE= + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU= + dependencies: + bser "2.1.1" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz?cache=0&sync_timestamp=1585068742276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffiggy-pudding%2Fdownload%2Ffiggy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4= + +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz?cache=0&sync_timestamp=1581865639901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz?cache=0&sync_timestamp=1581865639901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865639901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w= + dependencies: + flat-cache "^2.0.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90= + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +find-node-modules@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/find-node-modules/download/find-node-modules-2.0.0.tgz?cache=0&sync_timestamp=1594804338368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-node-modules%2Fdownload%2Ffind-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" + integrity sha1-XbH7nmaKPUUds9YYzRZ83VnkG2k= + dependencies: + findup-sync "^3.0.0" + merge "^1.2.1" + +find-npm-prefix@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/find-npm-prefix/download/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" + integrity sha1-jYzix4s7S55myKzGo3wjHrhBz98= + +find-root@1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/find-root/download/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ= + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1597170240264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597170240264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597170240264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-versions@^3.0.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/find-versions/download/find-versions-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-versions%2Fdownload%2Ffind-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha1-ECl/mAMKeGgpaBaQVF72We0dJU4= + dependencies: + semver-regex "^2.0.0" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/findup-sync/download/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha1-F7EI+e5RLft6XH88iyfqnhqcCNE= + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA= + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha1-RXWyHivO50NKqb5mL0t7X5wrUTg= + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +fn-name@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/fn-name/download/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" + integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/from2/download/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" + integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.10" + +from2@^2.1.0, from2@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@8.1.0, fs-extra@^8.0.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1591231538901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha1-zP+FcIQef+QmVpPaiJNsVa7X98c= + dependencies: + minipass "^2.6.0" + +fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: + version "1.2.10" + resolved "https://registry.npm.taobao.org/fs-vacuum/download/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: + version "1.0.10" + resolved "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg= + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffunctional-red-black-tree%2Fdownload%2Ffunctional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +g-status@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/g-status/download/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" + integrity sha1-Jw/TIRno/JSW8Gb+X+iOCmvHi5c= + dependencies: + arrify "^1.0.1" + matcher "^1.0.0" + simple-git "^1.85.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/genfun/download/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc= + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk= + +gentle-fs@^2.3.0, gentle-fs@^2.3.1: + version "2.3.1" + resolved "https://registry.npm.taobao.org/gentle-fs/download/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" + integrity sha1-ESAb9mwY+TDdynLPaUYL36BXJ7E= + dependencies: + aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" + fs-vacuum "^1.2.10" + graceful-fs "^4.1.11" + iferr "^0.1.5" + infer-owner "^1.0.4" + mkdirp "^0.5.1" + path-is-inside "^1.0.2" + read-cmd-shim "^1.0.1" + slide "^1.1.6" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&sync_timestamp=1575993577501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha1-tf3nfyLL4185C04ImSLFC85u9mQ= + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs= + +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha1-jV3pjxUXGhJcXlFmQ8em0OqKlvY= + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha1-SWaheV7lrOZecGxLe+txJX1uItM= + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-log-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/git-log-parser/download/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" + integrity sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= + dependencies: + argv-formatter "~1.0.0" + spawn-error-forwarder "~1.0.0" + split2 "~1.0.0" + stream-combiner2 "~1.1.1" + through2 "~2.0.0" + traverse "~0.6.6" + +glob-parent@^5.0.0, glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha1-tsHvQXxOVmPqSY8cRa+saRa7wik= + dependencies: + is-glob "^4.0.1" + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha1-qmCKL2xXetNX4a5aXCbZqNGWklU= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0, global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz?cache=0&sync_timestamp=1573231918216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal-dirs%2Fdownload%2Fglobal-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/global-modules/download/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o= + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/global-prefix/download/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1596709302233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1596709302233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg= + dependencies: + type-fest "^0.8.1" + +globby@^10.0.0: + version "10.0.2" + resolved "https://registry.npm.taobao.org/globby/download/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha1-J3WT50WsqkZGw6tBEonsR6A5JUM= + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha1-mivxB6Bo8//qvEmtcCx57ejP01c= + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588086924019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha1-Ila94U02MpWMRl68ltxGfKB6Kfs= + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handlebars@^4.7.6: + version "4.7.6" + resolved "https://registry.npm.taobao.org/handlebars/download/handlebars-4.7.6.tgz?cache=0&sync_timestamp=1585937260212&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandlebars%2Fdownload%2Fhandlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha1-1MBcG6+Q6ZRfd6pop6IZqkp9904= + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596084327526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha1-HwgDufjLIMD6E4It8ezds2veHv0= + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/hard-rejection/download/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM= + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg= + +has-unicode@^2.0.0, has-unicode@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + dependencies: + function-bind "^1.1.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg= + dependencies: + parse-passwd "^1.0.0" + +hook-std@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/hook-std/download/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" + integrity sha1-/5qv3rtqmJo1T3KbtkRc9KOnB3w= + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: + version "2.8.8" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1594428020608&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg= + +hosted-git-info@^3.0.0: + version "3.0.5" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.5.tgz?cache=0&sync_timestamp=1594428020608&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-3.0.5.tgz#bea87905ef7317442e8df3087faa3c842397df03" + integrity sha1-vqh5Be9zF0QujfMIf6o8hCOX3wM= + dependencies: + lru-cache "^6.0.0" + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg= + dependencies: + whatwg-encoding "^1.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-escaper%2Fdownload%2Fhtml-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha1-39YAJ9o2o238viNiYsAKWCJoFFM= + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz?cache=0&sync_timestamp=1583107845365&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-cache-semantics%2Fdownload%2Fhttp-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha1-ObDhat2bYFvwqe89nar0hDtMrNI= + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha1-5IIb7vWyFCogJr1zkm/lN2McVAU= + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-3.0.0.tgz#598f42dc815949a11e2c6dbfdf24cd8a4c165327" + integrity sha1-WY9C3IFZSaEeLG2/3yTNikwWUyc= + dependencies: + agent-base "5" + debug "4" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868483922&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha1-TuenN6vZJniik9mzShr00NCMeHs= + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs= + dependencies: + agent-base "5" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +husky@^2.3.0: + version "2.7.0" + resolved "https://registry.npm.taobao.org/husky/download/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05" + integrity sha1-wKmmo7URRiJOEbugtGu6VG5GHQU= + dependencies: + cosmiconfig "^5.2.0" + execa "^1.0.0" + find-up "^3.0.0" + get-stdin "^7.0.0" + is-ci "^2.0.0" + pkg-dir "^4.1.0" + please-upgrade-node "^3.1.1" + read-pkg "^5.1.1" + run-node "^1.0.0" + slash "^3.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE= + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +iferr@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/iferr/download/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" + integrity sha1-6f3kmp2gbcSkGUxsntbQgwUDem0= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc= + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= + +ignore@^5.1.1, ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha1-8VCotQo0KJsz4i9YiavU2AFvDlc= + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/import-from/download/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha1-BVz+w4zVon2AV8pRN219O/CJGWY= + dependencies: + resolve-from "^5.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha1-VQcL44pZk88Y72236WH1vuXFoJ0= + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@*, imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= + +inflight@^1.0.4, inflight@~1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc= + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.npm.taobao.org/init-package-json/download/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha1-Rf/i9hCoyhNPK9HbVjeyNQcPbL4= + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +inquirer@6.5.2: + version "6.5.2" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.2.tgz?cache=0&sync_timestamp=1595471629455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha1-rVCUI3XQNtMn/1KMCL1fqwiZKMo= + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +into-stream@^5.0.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/into-stream/download/into-stream-5.1.1.tgz?cache=0&sync_timestamp=1597341484868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finto-stream%2Fdownload%2Finto-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" + integrity sha1-+aIKNIoR88E/rOInY/LQLhJ/Tbg= + dependencies: + from2 "^2.3.0" + p-is-promise "^3.0.0" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha1-76ouqdqg16suoTqXsritUf776L4= + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz?cache=0&sync_timestamp=1600719276620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk= + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw= + dependencies: + ci-info "^1.5.0" + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw= + dependencies: + ci-info "^2.0.0" + +is-cidr@^3.0.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/is-cidr/download/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" + integrity sha1-6S7xIb3sJ4InGnfOSHqLjfNxirc= + dependencies: + cidr-regex "^2.0.10" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha1-vac28s2P0G0yhE53Q7+nSUw7/X4= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-generator-fn/download/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha1-fRQK3DiarzARqPKipM+m+q3/sRg= + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz?cache=0&sync_timestamp=1586162509580&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-installed-globally%2Fdownload%2Fis-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz?cache=0&sync_timestamp=1589567494220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-npm%2Fdownload%2Fis-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-obj@^1.0.0, is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-observable/download/is-observable-1.1.0.tgz?cache=0&sync_timestamp=1596373335763&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-observable%2Fdownload%2Fis-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha1-s+mGyPRN6VCGfKtUA/WjRlAFl14= + dependencies: + symbol-observable "^1.1.0" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha1-WsSLNF72dTOb1sekipEhELJBz1I= + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz?cache=0&sync_timestamp=1569835754259&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-inside%2Fdownload%2Fis-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-5.0.0.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q= + +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz?cache=0&sync_timestamp=1588001830257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-promise%2Fdownload%2Fis-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha1-OauVnMv5p3TPB597QMeib3YxNfE= + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555746435&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k= + dependencies: + has-symbols "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha1-13hIi9CkZmo76KFIK58rqv7eqLQ= + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha1-venDJoDW+uBBKdasnZIc54FfeOM= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc= + dependencies: + has-symbols "^1.0.1" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-text-path/download/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +issue-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/issue-parser/download/issue-parser-5.0.0.tgz#0e22a40bc275b6c7da6ddf4a9b979e8ca9faf0d4" + integrity sha1-DiKkC8J1tsfabd9Km5eejKn68NQ= + dependencies: + lodash.capitalize "^4.2.1" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.uniqby "^4.7.0" + +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k= + +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha1-pfY9kfC7wMPkee9MXeAnM17G1jA= + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.4: + version "2.0.8" + resolved "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha1-WoETzXRtQ8SInro2qxDn1QybTzM= + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.1: + version "3.0.6" + resolved "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha1-KEmXxIIRdS7EhiU9qX44ed77qMg= + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.2.6: + version "2.2.7" + resolved "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha1-XZOfYjfXtIOTzAlZ6rQM1P0FaTE= + dependencies: + html-escaper "^2.0.0" + +java-properties@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/java-properties/download/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + integrity sha1-zNH6c5B0OKW1w4mCJp0Odx/nghE= + +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha1-CNjBXreaf6P8mCabwUtFHugvgDk= + dependencies: + "@jest/types" "^24.9.0" + execa "^1.0.0" + throat "^4.0.0" + +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-cli/download/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha1-rS3mLQdHLUGcarwwH8QyuYsQ0q8= + dependencies: + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^13.3.0" + +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-config/download/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha1-+xu8YMc6Rq8DWQcZ76SCXm5N0bU= + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + micromatch "^3.1.10" + pretty-format "^24.9.0" + realpath-native "^1.1.0" + +jest-diff@^24.3.0, jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-diff/download/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha1-kxt9DVd4obr3RSy4FuMl43JAVdo= + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-docblock@^24.3.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-docblock/download/jest-docblock-24.9.0.tgz?cache=0&sync_timestamp=1588614998936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-docblock%2Fdownload%2Fjest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" + integrity sha1-eXAgGAK6Vg4cQJLMJcvt9a9ajOI= + dependencies: + detect-newline "^2.1.0" + +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-each/download/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha1-6y2mAuKmEImNvF8fbfO6hrVfiwU= + dependencies: + "@jest/types" "^24.9.0" + chalk "^2.0.1" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha1-SwgGx/yU+V7bNpppzCd47sK3N1s= + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + jsdom "^11.5.1" + +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-24.9.0.tgz?cache=0&sync_timestamp=1601981707099&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-environment-node%2Fdownload%2Fjest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha1-Mz0tJ5b5aH8q7r8HQrUZ8zwcv9M= + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha1-FoSgyKUPLkkBtmRK6GH1ee7S7w4= + +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha1-s4pdZCdJNOIfpBeump++t3zqrH0= + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha1-H3sb0yQsF3TmKsq7NkbZavw75qA= + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.9.0" + is-generator-fn "^2.0.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + throat "^4.0.0" + +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha1-tmXep8dxAMXE99/LFTtlzwfc+Wo= + dependencies: + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha1-9bNmHV5ijf/m3WUlHf2uDofDoHM= + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-message-util/download/jest-message-util-24.9.0.tgz?cache=0&sync_timestamp=1601981690584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-message-util%2Fdownload%2Fjest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha1-Un9UoeOA9eICqNEUmw7IcvQxGeM= + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-mock/download/jest-mock-24.9.0.tgz?cache=0&sync_timestamp=1601981687907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-mock%2Fdownload%2Fjest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha1-wig1VB7jebkIZzrVEIeiGFwT8cY= + dependencies: + "@jest/types" "^24.9.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.2" + resolved "https://registry.npm.taobao.org/jest-pnp-resolver/download/jest-pnp-resolver-1.2.2.tgz?cache=0&sync_timestamp=1592991657938&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-pnp-resolver%2Fdownload%2Fjest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha1-twSsCuAoqJEIpNBAs/kZ393I4zw= + +jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-24.9.0.tgz?cache=0&sync_timestamp=1588615314194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-regex-util%2Fdownload%2Fjest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha1-wT+zOAveIr9ldUMsST6o/jeWVjY= + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha1-rQVRmJWcTPuopPBmxnOj8HhlB6s= + dependencies: + "@jest/types" "^24.9.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.9.0" + +jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-resolve/download/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha1-3/BMdoevNMTdflJIktnPd+XRcyE= + dependencies: + "@jest/types" "^24.9.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-runner/download/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha1-V0+v29VEVcKzS0vfQ2WiOFf830I= + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.4.2" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-runtime/download/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha1-nxRYOvak9zFKap2fAibhp4HI5Kw= + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^13.3.0" + +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-24.9.0.tgz?cache=0&sync_timestamp=1601890139477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-serializer%2Fdownload%2Fjest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha1-5tfX75bTHouQeacUdUxdXFgojnM= + +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha1-7I6cpPLsDFyHro+SXPl0l7DpUbo= + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-util/download/jest-util-24.9.0.tgz?cache=0&sync_timestamp=1601981689795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-util%2Fdownload%2Fjest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha1-c5aBTkhTbS6Fo33j5MQx18sUAWI= + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-validate/download/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha1-B3XFU2DRc82FTkAYB1bU/1Le+Ks= + dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" + chalk "^2.0.1" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-watcher/download/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha1-S1bl0c7/AF9biOUo3Jr8jdTtKzs= + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.9.0" + string-length "^2.0.0" + +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-24.9.0.tgz?cache=0&sync_timestamp=1601890178757&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U= + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest@^24.3.1: + version "24.9.0" + resolved "https://registry.npm.taobao.org/jest/download/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha1-mH0pDAWgi1LFYYjBAC42jtsAcXE= + dependencies: + import-local "^2.0.0" + jest-cli "^24.9.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796305651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172281856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha1-p6NBcPJqIbsWJCTYray0ETpp5II= + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.npm.taobao.org/jsdom/download/jsdom-11.12.0.tgz?cache=0&sync_timestamp=1596916185263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsdom%2Fdownload%2Fjsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha1-GoDUDd03ih3lllbp5txaO6hle8g= + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsep@^0.3.0: + version "0.3.5" + resolved "https://registry.npm.taobao.org/jsep/download/jsep-0.3.5.tgz#3fd79ebd92f6f434e4857d5272aaeef7d948264d" + integrity sha1-P9eevZL29DTkhX1Scqru99lIJk0= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk= + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1599064788298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@2.x, json5@^2.1.2: + version "2.1.3" + resolved "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM= + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz?cache=0&sync_timestamp=1601440395620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkleur%2Fdownload%2Fkleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4= + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + +lazy-property@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/lazy-property/download/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" + integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcov-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/lcov-parse/download/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/left-pad/download/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha1-W4o6d2Xf4AEmHd6RVYnngvjJTR4= + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I= + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha1-rkViwAdHO5MqYgDUAyaN0v/8at4= + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +libcipm@^4.0.8: + version "4.0.8" + resolved "https://registry.npm.taobao.org/libcipm/download/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" + integrity sha1-3OpJGeEN+85CAyfmOQFhO5FBvIk= + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.1" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + graceful-fs "^4.1.11" + ini "^1.3.5" + lock-verify "^2.1.0" + mkdirp "^0.5.1" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + pacote "^9.1.0" + read-package-json "^2.0.13" + rimraf "^2.6.2" + worker-farm "^1.6.0" + +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/libnpm/download/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha1-C+EbTJ3U0f/X2Vx4bpLlXWW+d6I= + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.3" + find-npm-prefix "^1.0.2" + libnpmaccess "^3.0.2" + libnpmconfig "^1.2.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + lock-verify "^2.0.2" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" + npmlog "^4.1.2" + pacote "^9.5.3" + read-package-json "^2.0.13" + stringify-package "^1.0.0" + +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/libnpmaccess/download/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha1-iy1yNFujvvkNO09pTt1cBBf1iSM= + dependencies: + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + +libnpmconfig@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/libnpmconfig/download/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha1-wML3k6dOZ9SCXlA556AqAETfy8A= + dependencies: + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" + +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.npm.taobao.org/libnpmhook/download/libnpmhook-5.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flibnpmhook%2Fdownload%2Flibnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha1-QCDA9e2/COvjlTJcql6gGIW5KPc= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/libnpmorg/download/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha1-XSUD9s61fzPb3McY5mmP6m1a0Ic= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmpublish@^1.1.2: + version "1.1.3" + resolved "https://registry.npm.taobao.org/libnpmpublish/download/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha1-43gnlnItee7xoKIpRMEX4MTKQoA= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + semver "^5.5.1" + ssri "^6.0.1" + +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/libnpmsearch/download/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha1-mk8FkQLTjj3UQIW9v+UJXypQRM8= + dependencies: + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/libnpmteam/download/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha1-i0i8u2znDdgVDJUPy9vz/rbuyCA= + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.4: + version "10.2.4" + resolved "https://registry.npm.taobao.org/libnpx/download/libnpx-10.2.4.tgz?cache=0&sync_timestamp=1595265104817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flibnpx%2Fdownload%2Flibnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee" + integrity sha1-7w4yWOKa7y7H7jJ2EV4g5n9n1O4= + dependencies: + dotenv "^5.0.1" + npm-package-arg "^6.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.0" + update-notifier "^2.3.0" + which "^1.3.0" + y18n "^4.0.0" + yargs "^14.2.3" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +lint-staged@^8.1.7: + version "8.2.1" + resolved "https://registry.npm.taobao.org/lint-staged/download/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" + integrity sha1-dS/PIi2dKPMjo7gPHmaPNlT/Ih8= + dependencies: + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.2.0" + debug "^3.1.0" + dedent "^0.7.0" + del "^3.0.0" + execa "^1.0.0" + g-status "^2.0.2" + is-glob "^4.0.0" + is-windows "^1.0.2" + listr "^0.14.2" + listr-update-renderer "^0.5.0" + lodash "^4.17.11" + log-symbols "^2.2.0" + micromatch "^3.1.8" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.2" + string-argv "^0.0.2" + stringify-object "^3.2.2" + yup "^0.27.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/listr-silent-renderer/download/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/listr-update-renderer/download/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha1-Tqg2hUinuK7LfgbYyVy0WuLt5qI= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha1-8RMhZ1NepMEmEQK58o2sfLoeA9s= + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr@^0.14.2: + version "0.14.3" + resolved "https://registry.npm.taobao.org/listr/download/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha1-L+qQlgTkNL5GTFC926DUlpKPpYY= + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1597082033698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1597082033698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1597082033698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= + dependencies: + p-locate "^4.1.0" + +lock-verify@^2.0.2, lock-verify@^2.1.0: + version "2.2.1" + resolved "https://registry.npm.taobao.org/lock-verify/download/lock-verify-2.2.1.tgz?cache=0&sync_timestamp=1600350999054&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flock-verify%2Fdownload%2Flock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1" + integrity sha1-gRB5SMUe0W+XuW/4tgZ1r/skP8E= + dependencies: + "@iarna/cli" "^1.2.0" + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/lockfile/download/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha1-B/gZ0lrkj4flOOZXi2lkpJgaVgk= + dependencies: + signal-exit "^3.0.2" + +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.npm.taobao.org/lodash._baseindexof/download/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/lodash._baseuniq/download/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.npm.taobao.org/lodash._bindcallback/download/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.npm.taobao.org/lodash._cacheindexof/download/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.npm.taobao.org/lodash._createcache/download/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= + dependencies: + lodash._getnative "^3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/lodash._createset/download/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/lodash._root/download/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + +lodash.capitalize@^4.2.1: + version "4.2.1" + resolved "https://registry.npm.taobao.org/lodash.capitalize/download/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= + +lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: + version "4.5.0" + resolved "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.npm.taobao.org/lodash.escaperegexp/download/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/lodash.ismatch/download/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.map@^4.5.1: + version "4.6.0" + resolved "https://registry.npm.taobao.org/lodash.map/download/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz?cache=0&sync_timestamp=1589682725270&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.memoize%2Fdownload%2Flodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.npm.taobao.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.npm.taobao.org/lodash.set/download/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/lodash.toarray/download/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.union@~4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/lodash.union/download/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: + version "4.5.0" + resolved "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash.uniqby@^4.7.0: + version "4.7.0" + resolved "https://registry.npm.taobao.org/lodash.uniqby/download/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= + +lodash.without@~4.4.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= + +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: + version "4.17.20" + resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597336147792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI= + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.npm.taobao.org/log-driver/download/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha1-Y7lQIfBwL+36LJuwok53l9cYcdg= + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz?cache=0&sync_timestamp=1587898957951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1587898957951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo= + dependencies: + chalk "^2.0.1" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/log-update/download/log-update-2.3.0.tgz?cache=0&sync_timestamp=1582191690231&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-update%2Fdownload%2Flog-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +longest@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/longest/download/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= + dependencies: + yallist "^4.0.0" + +macos-release@^2.2.0: + version "2.4.1" + resolved "https://registry.npm.taobao.org/macos-release/download/macos-release-2.4.1.tgz?cache=0&sync_timestamp=1595440450554&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmacos-release%2Fdownload%2Fmacos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" + integrity sha1-ZAM9Dsal5jdRVadLGh66jlCYIKw= + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= + dependencies: + pify "^3.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@1.x: + version "1.3.6" + resolved "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz?cache=0&sync_timestamp=1582106154960&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-error%2Fdownload%2Fmake-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha1-LrLjfqm2fEiR9oShOUeZr0hM96I= + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1595371321873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha1-qoOHEE8mh+3KAchofuRQE9AtGb0= + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha1-uRIhtUJzS58UJWwBMsiXxdclb9U= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +marked-terminal@^3.2.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/marked-terminal/download/marked-terminal-3.3.0.tgz#25ce0c0299285998c7636beaefc87055341ba1bd" + integrity sha1-Jc4MApkoWZjHY2vq78hwVTQbob0= + dependencies: + ansi-escapes "^3.1.0" + cardinal "^2.1.1" + chalk "^2.4.1" + cli-table "^0.3.1" + node-emoji "^1.4.1" + supports-hyperlinks "^1.0.1" + +marked@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/marked/download/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" + integrity sha1-tkIB8FHScbHtwQoE0a6bdLuOXA4= + +matcher@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/matcher/download/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" + integrity sha1-UdgwHhOPhAmCszixFrsMCa9iwcI= + dependencies: + escape-string-regexp "^1.0.4" + +meant@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/meant/download/meant-1.0.2.tgz?cache=0&sync_timestamp=1595295635022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeant%2Fdownload%2Fmeant-1.0.2.tgz#5d0c78310a3d8ae1408a16be0fe0bd42a969f560" + integrity sha1-XQx4MQo9iuFAiha+D+C9Qqlp9WA= + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/memorystream/download/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +meow@^7.0.0: + version "7.1.1" + resolved "https://registry.npm.taobao.org/meow/download/meow-7.1.1.tgz?cache=0&sync_timestamp=1598693367626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" + integrity sha1-fAFZXj0zf8sOxOju0WZuqVkD0wY= + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= + +merge@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/merge/download/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU= + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.0, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk= + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831212519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I= + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8= + dependencies: + mime-db "1.44.0" + +mime@^2.4.3: + version "2.4.6" + resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596728112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE= + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1596094012686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI= + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596094012686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/min-indent/download/min-indent-1.0.1.tgz?cache=0&sync_timestamp=1590693908857&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmin-indent%2Fdownload%2Fmin-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha1-pj9oFnOzBXH76LwlaGrnRu76mGk= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/minimist-options/download/minimist-options-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist-options%2Fdownload%2Fminimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk= + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@1.2.5, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1584051509720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY= + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.npm.taobao.org/minizlib/download/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha1-IpDeloGKNMKVUcio0wEha9Zahh0= + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY= + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: + version "0.5.5" + resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= + dependencies: + minimist "^1.2.5" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/modify-values/download/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha1-s5OfpgVUZHTj4+PGPWS9Q7TuYCI= + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +mri@^1.1.5: + version "1.1.6" + resolved "https://registry.npm.taobao.org/mri/download/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" + integrity sha1-SZUuEETbIdv5D2zZK8nJp3fUFaY= + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +multimatch@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/multimatch/download/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha1-jDwPbj6ESa2grz3SnvtJGjdRkbM= + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha1-174036MQW5FJTDFHCJMV7/iHSwE= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317437265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8= + +nerf-dart@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/nerf-dart/download/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" + integrity sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= + +node-emoji@^1.4.1: + version "1.10.0" + resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= + dependencies: + lodash.toarray "^4.4.0" + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha1-ZQfQ4XqewL477FFpWKSXzsVL9aQ= + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-2.6.1.tgz?cache=0&sync_timestamp=1599309119313&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI= + +node-gyp@^5.0.2, node-gyp@^5.1.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/node-gyp/download/node-gyp-5.1.1.tgz?cache=0&sync_timestamp=1597202690285&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + integrity sha1-65Ffe2Mck30oLjOu1Ey3oCX2Kj4= + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^5.4.2: + version "5.4.3" + resolved "https://registry.npm.taobao.org/node-notifier/download/node-notifier-5.4.3.tgz?cache=0&sync_timestamp=1597311416653&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-notifier%2Fdownload%2Fnode-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha1-y3La+UyTkECY4oucWQ/YZuRkvVA= + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +nopt@^4.0.1, nopt@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/nopt/download/nopt-4.0.3.tgz?cache=0&sync_timestamp=1597649956050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg= + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-url@^4.0.0: + version "4.5.0" + resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha1-RTNUCH5sqWlXvY9br3U/WYIUISk= + +npm-audit-report@^1.3.3: + version "1.3.3" + resolved "https://registry.npm.taobao.org/npm-audit-report/download/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" + integrity sha1-gibe6yU7VRdu0UdZKjmVRC8hee0= + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s= + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/npm-cache-filename/download/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= + +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/npm-install-checks/download/npm-install-checks-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-install-checks%2Fdownload%2Fnpm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha1-qy4yrSe6pGcgcGkI5bFMGFLeRNk= + dependencies: + semver "^2.3.0 || 3.x || 4 || 5" + +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.5: + version "3.1.5" + resolved "https://registry.npm.taobao.org/npm-lifecycle/download/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha1-mILTZCuMgsgVeCoS5qG/7tACYwk= + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-logical-tree@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/npm-logical-tree/download/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" + integrity sha1-RGEBQcokZkytNdHmBxdhk/2PW4g= + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI= + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc= + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12, npm-packlist@^1.4.8: + version "1.4.8" + resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha1-Vu5swTW5+YrT1Rwcldoiu7my7z4= + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha1-xkE0el/51qCeTZvOVYDE9QUnjmQ= + dependencies: + which "^1.2.10" + +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c= + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-profile@^4.0.2, npm-profile@^4.0.4: + version "4.0.4" + resolved "https://registry.npm.taobao.org/npm-profile/download/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" + integrity sha1-KO6UOQ6TbfbQhCY+4gYTNqahWBs= + dependencies: + aproba "^1.1.2 || 2" + figgy-pudding "^3.4.1" + npm-registry-fetch "^4.0.0" + +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: + version "4.0.7" + resolved "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.7.tgz?cache=0&sync_timestamp=1597697876643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-registry-fetch%2Fdownload%2Fnpm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" + integrity sha1-V5Ub9lQeAkazTJ+aOKtzYHyUSdc= + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.npm.taobao.org/npm-run-all/download/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha1-BEdiAqFe4OLiFAgIYb/xKlHZj7o= + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo= + dependencies: + path-key "^3.0.0" + +npm-user-validate@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/npm-user-validate/download/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" + integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/npm-which/download/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +npm@^6.10.3: + version "6.14.8" + resolved "https://registry.npm.taobao.org/npm/download/npm-6.14.8.tgz?cache=0&sync_timestamp=1602010800178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm%2Fdownload%2Fnpm-6.14.8.tgz#64ef754345639bc035982ec3f609353c8539033c" + integrity sha1-ZO91Q0Vjm8A1mC7D9gk1PIU5Azw= + dependencies: + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" + archy "~1.0.0" + bin-links "^1.1.8" + bluebird "^3.5.5" + byte-size "^5.0.1" + cacache "^12.0.3" + call-limit "^1.1.1" + chownr "^1.1.4" + ci-info "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + columnify "~1.5.4" + config-chain "^1.1.12" + detect-indent "~5.0.0" + detect-newline "^2.1.0" + dezalgo "~1.0.3" + editor "~1.0.0" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + fs-vacuum "~1.2.10" + fs-write-stream-atomic "~1.0.10" + gentle-fs "^2.3.1" + glob "^7.1.6" + graceful-fs "^4.2.4" + has-unicode "~2.0.1" + hosted-git-info "^2.8.8" + iferr "^1.0.2" + infer-owner "^1.0.4" + inflight "~1.0.6" + inherits "^2.0.4" + ini "^1.3.5" + init-package-json "^1.10.3" + is-cidr "^3.0.0" + json-parse-better-errors "^1.0.2" + lazy-property "~1.0.0" + libcipm "^4.0.8" + libnpm "^3.0.1" + libnpmaccess "^3.0.2" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + libnpx "^10.2.4" + lock-verify "^2.1.0" + lockfile "^1.0.4" + lodash._baseuniq "~4.6.0" + lodash.clonedeep "~4.5.0" + lodash.union "~4.6.0" + lodash.uniq "~4.5.0" + lodash.without "~4.4.0" + lru-cache "^5.1.1" + meant "^1.0.2" + mississippi "^3.0.0" + mkdirp "^0.5.5" + move-concurrently "^1.0.1" + node-gyp "^5.1.0" + nopt "^4.0.3" + normalize-package-data "^2.5.0" + npm-audit-report "^1.3.3" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.5" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.8" + npm-pick-manifest "^3.0.2" + npm-profile "^4.0.4" + npm-registry-fetch "^4.0.7" + npm-user-validate "~1.0.0" + npmlog "~4.1.2" + once "~1.4.0" + opener "^1.5.1" + osenv "^0.1.5" + pacote "^9.5.12" + path-is-inside "~1.0.2" + promise-inflight "~1.0.1" + qrcode-terminal "^0.12.0" + query-string "^6.8.2" + qw "~1.0.1" + read "~1.0.7" + read-cmd-shim "^1.0.5" + read-installed "~4.0.3" + read-package-json "^2.1.1" + read-package-tree "^5.3.1" + readable-stream "^3.6.0" + readdir-scoped-modules "^1.1.0" + request "^2.88.0" + retry "^0.12.0" + rimraf "^2.7.1" + safe-buffer "^5.1.2" + semver "^5.7.1" + sha "^3.0.0" + slide "~1.1.6" + sorted-object "~2.0.1" + sorted-union-stream "~2.1.3" + ssri "^6.0.1" + stringify-package "^1.0.1" + tar "^4.4.13" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + uid-number "0.0.6" + umask "~1.1.0" + unique-filename "^1.1.1" + unpipe "~1.0.0" + update-notifier "^2.5.0" + uuid "^3.3.3" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.3" + +npmlog@^4.1.2, npmlog@~4.1.2: + version "4.1.2" + resolved "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.0.7: + version "2.2.0" + resolved "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha1-IEh5qePQaP8qVROcLHcngGgaOLc= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545152574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA= + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.1.tgz?cache=0&sync_timestamp=1599844895115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" + integrity sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.0" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha1-Npvx+VktiridcS3O1cuBx8U1Jkk= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/octokit-pagination-methods/download/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha1-z0cu3J1VEFX573P25CtNu0yAvqQ= + +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1597005190531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005190531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= + dependencies: + mimic-fn "^2.1.0" + +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1598733439329&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopener%2Fdownload%2Fopener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha1-XTfh81B3udysQwE3InGv3rKhNZg= + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk= + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz?cache=0&sync_timestamp=1584865550362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I= + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/os-name/download/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha1-3sGdlmKW4c1i1wGlpm7h3ernCAE= + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-each-series/download/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + +p-filter@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-filter/download/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha1-GxRyVirnoPdC8PPT03GOpm/5wJw= + dependencies: + p-map "^2.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE= + +p-is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha1-WOeMff4uFjzyoE/4aefB26ZKWXE= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559720897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559720897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= + dependencies: + p-limit "^2.0.0" + +p-locate@^4.0.0, p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= + dependencies: + p-limit "^2.2.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s= + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-reduce@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha1-CUCNpJUHxsJ0+qMfKN8zS8cStko= + +p-retry@^4.0.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/p-retry/download/p-retry-4.2.0.tgz#ea9066c6b44f23cab4cd42f6147cdbbc6604da5d" + integrity sha1-6pBmxrRPI8q0zUL2FHzbvGYE2l0= + dependencies: + "@types/retry" "^0.12.0" + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: + version "9.5.12" + resolved "https://registry.npm.taobao.org/pacote/download/pacote-9.5.12.tgz?cache=0&sync_timestamp=1595370589537&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpacote%2Fdownload%2Fpacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha1-HhHdeo1za8w2s3WpgE1BuwN3v2Y= + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparallel-transform%2Fdownload%2Fparallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598129273895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598129273895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz?cache=0&sync_timestamp=1598129273895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha1-+WCIzfJKj6qa6poAny2dlCyZlkY= + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha1-zvMdyOCho7sNEFwM2Xzzv0f0428= + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0= + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.npm.taobao.org/pidtree/download/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha1-7wmsLMBTPfHzJQzPLE02aw0SEUo= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/pirates/download/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha1-ZDqSyviUVm+RsrmG0sZpUKji+4c= + dependencies: + node-modules-regexp "^1.0.0" + +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/pkg-conf/download/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= + dependencies: + find-up "^4.0.0" + +please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: + version "3.2.0" + resolved "https://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI= + dependencies: + semver-compare "^1.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha1-3rxkidem5rDnYRiIzsiAM30xY5Y= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s= + dependencies: + fast-diff "^1.1.2" + +prettier@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/prettier/download/prettier-2.1.2.tgz?cache=0&sync_timestamp=1600217249280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" + integrity sha1-MFBwDa4uTItnxMP2Zs24r0BeHOU= + +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.npm.taobao.org/pretty-format/download/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha1-EvrDGzcBmk7qPBGqmpWet2KKp8k= + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +pretty-quick@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/pretty-quick/download/pretty-quick-3.0.2.tgz#7ed460f7e43a647b1044ad8b7f41a0c8a7f1c51c" + integrity sha1-ftRg9+Q6ZHsQRK2Lf0GgyKfxxRw= + dependencies: + chalk "^3.0.0" + execa "^4.0.0" + find-up "^4.1.0" + ignore "^5.1.4" + mri "^1.1.5" + multimatch "^4.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= + +promise-inflight@^1.0.1, promise-inflight@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz?cache=0&sync_timestamp=1592142510714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpromise-retry%2Fdownload%2Fpromise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +prompts@^2.0.1: + version "2.3.2" + resolved "https://registry.npm.taobao.org/prompts/download/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha1-SAVy2J7POVZtK9P+LJ/Mt8TAsGg= + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/promzard/download/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + +property-expr@^1.5.0: + version "1.5.1" + resolved "https://registry.npm.taobao.org/property-expr/download/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" + integrity sha1-IuhwaJSgyOKNWHNYBPa6OjZzMU8= + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/protoduck/download/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8= + dependencies: + genfun "^5.0.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz?cache=0&sync_timestamp=1569938104994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpumpify%2Fdownload%2Fpumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/qrcode-terminal/download/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha1-u1tpnvf58FBQkqN0i+RGT+cbWBk= + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= + +query-string@^6.8.2: + version "6.13.5" + resolved "https://registry.npm.taobao.org/query-string/download/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8" + integrity sha1-meleL7cCHbkKbzc/mQwMgUs4Etg= + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha1-W4h48ROlgheEjGSCAmxz4bpXcn8= + +qw@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/qw/download/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" + integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^16.8.4: + version "16.13.1" + resolved "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz?cache=0&sync_timestamp=1602081924455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ= + +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/read-cmd-shim/download/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha1-h+Q+ulAJi6WjLQzrWDq45DuWHBY= + dependencies: + graceful-fs "^4.1.2" + +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/read-installed/download/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.2.tgz?cache=0&sync_timestamp=1597961547307&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-package-json%2Fdownload%2Fread-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha1-aZKytmxxdyWf646qxzw6zSi5Iio= + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz?cache=0&sync_timestamp=1581759331863&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-package-tree%2Fdownload%2Fread-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY= + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha1-GyIcYIi6d5lgHICPkRYcZuWPiXg= + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc= + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.0.0, read-pkg@^5.1.1, read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w= + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@~1.0.1, read@~1.0.7: + version "1.0.7" + resolved "https://registry.npm.taobao.org/read/download/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +"readable-stream@2 || 3", readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.1.10: + version "1.1.14" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha1-jUVAe0+HCg3K68DihnDRjnRRQwk= + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/realpath-native/download/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha1-IAMpT+oj+wZy8kduviL89Jii1lw= + dependencies: + util.promisify "^1.0.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/redent/download/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8= + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/redeyed/download/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= + dependencies: + esprima "~4.0.0" + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456117883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha1-ysLazIoepnX+qrrriugziYrkb1U= + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI= + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.4.0.tgz?cache=0&sync_timestamp=1594638434951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha1-10RoFUM/XV7WQxzV3KIQSPZrOX4= + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-auth-token@^4.0.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.2.0.tgz?cache=0&sync_timestamp=1594638434951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" + integrity sha1-HTff/acrvs0PWB5HFVQCE6Zet9o= + dependencies: + rc "^1.2.8" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4= + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz?cache=0&sync_timestamp=1595378690362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-core%2Fdownload%2Frequest-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8= + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg= + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.87.0, request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/resolve-dir/download/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= + +resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/resolve-global/download/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha1-oqed9K8so/Sb93753azTItrRklU= + dependencies: + global-dirs "^0.1.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz?cache=0&sync_timestamp=1585438700247&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha1-sllBtUloIxzC0bt2p5y38sC/hEQ= + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1589682814592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha1-stEE/g2Psnz54KHNqCYt04M8bKs= + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1589682814592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ= + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz?cache=0&sync_timestamp=1587966119578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-async%2Fdownload%2Frun-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= + +run-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/run-node/download/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" + integrity sha1-RrULlGoqotSUeuHYhumFb9nKvl4= + +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk= + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.3.3, rxjs@^6.4.0: + version "6.6.3" + resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.3.tgz?cache=0&sync_timestamp=1600896646394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha1-jKhGNcTaqQDA05Z6buesYCce5VI= + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1589129010497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129010497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz?cache=0&sync_timestamp=1571687334026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-regex%2Fdownload%2Fsafe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.npm.taobao.org/sane/download/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha1-7Ygf2SJzOmxGG8GJ3CtsAG8//e0= + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= + +semantic-release@^15.13.31: + version "15.14.0" + resolved "https://registry.npm.taobao.org/semantic-release/download/semantic-release-15.14.0.tgz#6ee79b7b3598332378190412880049709fa23376" + integrity sha1-buebezWYMyN4GQQSiABJcJ+iM3Y= + dependencies: + "@semantic-release/commit-analyzer" "^6.1.0" + "@semantic-release/error" "^2.2.0" + "@semantic-release/github" "^5.1.0" + "@semantic-release/npm" "^5.0.5" + "@semantic-release/release-notes-generator" "^7.1.2" + aggregate-error "^3.0.0" + cosmiconfig "^6.0.0" + debug "^4.0.0" + env-ci "^4.0.0" + execa "^3.2.0" + figures "^3.0.0" + find-versions "^3.0.0" + get-stream "^5.0.0" + git-log-parser "^1.2.0" + hook-std "^2.0.0" + hosted-git-info "^3.0.0" + lodash "^4.17.15" + marked "^0.7.0" + marked-terminal "^3.2.0" + p-locate "^4.0.0" + p-reduce "^2.0.0" + read-pkg-up "^7.0.0" + resolve-from "^5.0.0" + semver "^6.0.0" + signale "^1.2.1" + yargs "^15.0.1" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg= + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +semver@^6.0.0, semver@^6.2.0: + version "6.3.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= + +semver@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg= + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1585774809732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +sha@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/sha/download/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" + integrity sha1-svL5CvaQwWo6g5pqbGgOpR/t0a4= + dependencies: + graceful-fs "^4.1.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz?cache=0&sync_timestamp=1567781622888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz?cache=0&sync_timestamp=1567781622888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshell-quote%2Fdownload%2Fshell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I= + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha1-1rkYHBpI05cyTISHHvvPxz/AZUs= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw= + +signale@^1.2.1: + version "1.4.0" + resolved "https://registry.npm.taobao.org/signale/download/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha1-xL5YMC+wJirAD8PYhqfBE3WQQvE= + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + +simple-git@^1.85.0: + version "1.132.0" + resolved "https://registry.npm.taobao.org/simple-git/download/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1" + integrity sha1-U6xMXsnnTjfC/UYeIzCfIvzfCbE= + dependencies: + debug "^4.0.1" + +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q= + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY= + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.npm.taobao.org/slide/download/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha1-kWBcJdkWUvRmHqacz0XxszHKIbo= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y= + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz?cache=0&sync_timestamp=1599605598402&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM= + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sorted-object@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/sorted-object/download/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= + +sorted-union-stream@~2.1.3: + version "2.1.3" + resolved "https://registry.npm.taobao.org/sorted-union-stream/download/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" + integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= + dependencies: + from2 "^1.3.0" + stream-iterate "^1.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.19" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719517036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha1-qYti+G3K9PZzmWSMCFKRq56P7WE= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +spawn-error-forwarder@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/spawn-error-forwarder/download/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" + integrity sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha1-3s6BrJweZxPl99G28X1Gj6U9iak= + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0= + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha1-z3D1BILu/cmOPOCmgz5KU87rpnk= + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.6.tgz?cache=0&sync_timestamp=1600286627478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha1-yAdXODwoq/cpZ0SZjLwQaui4VM4= + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/split-on-first/download/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha1-9hCv7uOxK84dDDBCXnY5i3gkml8= + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + dependencies: + extend-shallow "^3.0.0" + +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/split2/download/split2-2.2.0.tgz?cache=0&sync_timestamp=1598086085653&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit2%2Fdownload%2Fsplit2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha1-GGsldbz4PoW30YRldWI47k7kJJM= + dependencies: + through2 "^2.0.2" + +split2@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/split2/download/split2-1.0.0.tgz?cache=0&sync_timestamp=1598086085653&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit2%2Fdownload%2Fsplit2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" + integrity sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= + dependencies: + through2 "~2.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/split/download/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k= + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha1-+2YcC+8ps520B2nuOfpwCT1vaHc= + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg= + dependencies: + figgy-pudding "^3.5.1" + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha1-M+ujiXeIVYvr/C2wWdwVjsNs67g= + +staged-git-files@1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/staged-git-files/download/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" + integrity sha1-QybTOIbcns+immGTv1EbqQpGRUs= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-combiner2@~1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/stream-combiner2/download/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-iterate@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/stream-iterate/download/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" + integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= + dependencies: + readable-stream "^2.1.5" + stream-shift "^1.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147178936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-argv@^0.0.2: + version "0.0.2" + resolved "https://registry.npm.taobao.org/string-argv/download/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/string-length/download/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.padend@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/string.prototype.padend/download/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha1-3Aj1eoAQ3FwVNVAxj2fhOtu3KsM= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz?cache=0&sync_timestamp=1586465233837&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz?cache=0&sync_timestamp=1586465234129&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.2.2: + version "3.3.0" + resolved "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha1-cDBlrvyhkwDTzoivT1s5VtdVZik= + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/stringify-package/download/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha1-5ao2Q+f3TQ8oYoty89rVzs/DuoU= + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= + dependencies: + ansi-regex "^5.0.0" + +strip-bom@4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg= + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/strip-indent/download/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha1-wy4c7pQLazQyx3G8LFS8znPNMAE= + dependencies: + min-indent "^1.0.0" + +strip-json-comments@3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.0.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha1-hXE5dakfuHvxswXMp3OV5A0qZKc= + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.0.0, supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM= + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" + integrity sha1-cdrt82zBBgrFEAw1G7PaSMKcDvc= + dependencies: + has-flag "^2.0.0" + supports-color "^5.0.0" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz?cache=0&sync_timestamp=1601494689361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ= + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I= + +synchronous-promise@^2.0.6: + version "2.0.15" + resolved "https://registry.npm.taobao.org/synchronous-promise/download/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" + integrity sha1-B8oYIrneAAH1/3NZXz0IxPcg644= + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha1-EpLRlQDOP4YFOwXw6Ofko7shB54= + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: + version "4.4.13" + resolved "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU= + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/temp-dir/download/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempy@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/tempy/download/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha1-b2xbKVaVoWEwmWrVqwGovXJui/g= + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.npm.taobao.org/test-exclude/download/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha1-w9Ph4xHrfuQF4JLawQrv0JCR6sA= + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz?cache=0&sync_timestamp=1581859840988&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftext-extensions%2Fdownload%2Ftext-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY= + +text-table@^0.2.0, text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.2" + resolved "https://registry.npm.taobao.org/through2/download/through2-3.0.2.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha1-mfiJMc/HYex2eLQdXXM2tbage/Q= + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + +through@2, "through@>=2.2.7 <3", through@^2.3.6: + version "2.3.8" + resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/tiny-relative-date/download/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha1-+giq1QHtcw8xzAQxgdmVw5qTXgc= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550296062&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= + +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584645751908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +traverse@~0.6.6: + version "0.6.6" + resolved "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha1-eXJjBKaomKqDc0JymNVMLuixyzA= + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/trim-off-newlines/download/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + +ts-jest@^24.0.0: + version "24.3.0" + resolved "https://registry.npm.taobao.org/ts-jest/download/ts-jest-24.3.0.tgz?cache=0&sync_timestamp=1601375629408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-jest%2Fdownload%2Fts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" + integrity sha1-uXgU4+qzWeqEChrBEt6uaKpECGk= + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + +tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.0" + resolved "https://registry.npm.taobao.org/tslib/download/tslib-1.14.0.tgz?cache=0&sync_timestamp=1601998793819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.14.0.tgz#d624983f3e2c5e0b55307c3dd6c86acd737622c6" + integrity sha1-1iSYPz4sXgtVMHw91shqzXN2IsY= + +tslint@^5.11.0: + version "5.20.1" + resolved "https://registry.npm.taobao.org/tslint/download/tslint-5.20.1.tgz?cache=0&sync_timestamp=1600702773825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslint%2Fdownload%2Ftslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha1-5AHortoBUrxE3QfmFANPP4DGe30= + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k= + dependencies: + tslib "^1.8.1" + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha1-7XGZF/EcoN7lhicrKsSeAVot11k= + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364183265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz?cache=0&sync_timestamp=1585882977555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-check%2Fdownload%2Ftype-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE= + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz?cache=0&sync_timestamp=1585882977555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-check%2Fdownload%2Ftype-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.13.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha1-AXLLW86AsL1ULqNI21DH4hg02TQ= + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.3.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha1-Y9ANIE4FlHT+Xht8ARESu9HcKeE= + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.7.2: + version "3.9.7" + resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha1-mNYApevcOPQMsndSLxLcgA6eJfo= + +uglify-js@^3.1.4: + version "3.11.1" + resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.11.1.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.11.1.tgz#32d274fea8aac333293044afd7f81409d5040d38" + integrity sha1-MtJ0/qiqwzMpMESv1/gUCdUEDTg= + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0, umask@~1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/umask/download/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/universal-user-agent/download/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha1-/Y1st3OmeacJ6WfvgoijH8wD5Vc= + dependencies: + os-name "^3.1.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/universal-user-agent/download/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha1-M4H4UDslHA2c0hvB3pOeyd9UgO4= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz?cache=0&sync_timestamp=1601377450994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814527552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha1-qnFCYd55PoqCNHp7zJznTobyhgI= + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz?cache=0&sync_timestamp=1585438689517&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furix%2Fdownload%2Furix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-join@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/url-join/download/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha1-tkLiGiZGgI/6F4xMX9o5hE4Szec= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/util-extend/download/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/util-promisify/download/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +util.promisify@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha1-a693dLgO6w91INi4HQeYKlmruu4= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +uuid@^3.3.2, uuid@^3.3.3: + version "3.4.0" + resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1601826530476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4= + +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz?cache=0&sync_timestamp=1590871780233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha1-VLw83UMxe8qR413K8wWxpyN950U= + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha1-ConN9cwVgi35w2BUNnaWPgzDCM0= + dependencies: + browser-process-hrtime "^1.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha1-qFWYCx8LazWbodXZ+zmulB+qY60= + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA= + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78= + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-6.5.0.tgz?cache=0&sync_timestamp=1601488446581&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha1-8t8Cv/F2/WUHDfdK1cy7WhmZZag= + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1601488446581&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY= + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w= + dependencies: + string-width "^2.1.1" + +windows-release@^3.1.0: + version "3.3.3" + resolved "https://registry.npm.taobao.org/windows-release/download/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" + integrity sha1-HBACfHIldD7sa4nfFg1kwuApOZk= + dependencies: + execa "^1.0.0" + +word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha1-YQY29rH3A4kb00dxzLF/uTtHB5w= + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.6.0, worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha1-0LBUY8GIroBDlv1asqNwBir4dSk= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: + version "2.4.3" + resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz?cache=0&sync_timestamp=1567579932525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite%2Fdownload%2Fwrite-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM= + dependencies: + mkdirp "^0.5.1" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz?cache=0&sync_timestamp=1593925601875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha1-3/7xSGa46NyRM1glFNG++vlumA8= + dependencies: + async-limiter "~1.0.0" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo= + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz?cache=0&sync_timestamp=1601576779692&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz?cache=0&sync_timestamp=1601576779692&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= + +yaml@^1.10.0, yaml@^1.7.2: + version "1.10.0" + resolved "https://registry.npm.taobao.org/yaml/download/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha1-O1k63ZRIdgd9TWg/7gEIG9n/8x4= + +yargs-parser@10.x: + version "10.1.0" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha1-cgImW4n36eny5XZeD+c1qQXtuqg= + dependencies: + camelcase "^4.1.0" + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^15.0.1: + version "15.0.1" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-15.0.1.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + integrity sha1-VHhq9AuCDcsvuAJbEbTWWddjI7M= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2, yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-7.0.0.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^14.2.3: + version "14.2.3" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-14.2.3.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha1-Ghw+3O0a+yov6jNgS8bR2NaIpBQ= + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yargs@^15.0.1: + version "15.4.1" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg= + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yup@^0.27.0: + version "0.27.0" + resolved "https://registry.npm.taobao.org/yup/download/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" + integrity sha1-+MsZjI590hJL7dwkV1cTKQlrBuc= + dependencies: + "@babel/runtime" "^7.0.0" + fn-name "~2.0.1" + lodash "^4.17.11" + property-expr "^1.5.0" + synchronous-promise "^2.0.6" + toposort "^2.0.2" From 67b509181b46467b997648496cb316ad3587df84 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 8 Oct 2020 22:35:47 +0800 Subject: [PATCH 395/497] chore: ignore node engines on travis CI Signed-off-by: Zixuan Liu --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 730f6f99..940ae010 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ node_js: - '12' - 'stable' -install: yarn install +install: yarn install --ignore-engines script: - yarn run lint From 6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 26 Oct 2020 19:01:05 +0800 Subject: [PATCH 396/497] feat: changing TypeScript target from ES6 to ES2017 Signed-off-by: Zixuan Liu --- tsconfig.cjs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json index 78c4457c..55d0a60d 100644 --- a/tsconfig.cjs.json +++ b/tsconfig.cjs.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig", "compilerOptions": { - "target": "ES6", + "target": "ES2017", "module": "CommonJS", "outDir": "lib/cjs" } From 3b8f4f3fcbb4f93f3bc45113e0238f286977e83a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 26 Oct 2020 14:47:10 +0000 Subject: [PATCH 397/497] chore(release): 5.2.0 [skip ci] # [5.2.0](https://github.com/casbin/node-casbin/compare/v5.1.6...v5.2.0) (2020-10-26) ### Features * changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/node-casbin/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06a1bda7..813d3c7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.2.0](https://github.com/casbin/node-casbin/compare/v5.1.6...v5.2.0) (2020-10-26) + + +### Features + +* changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/node-casbin/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) + ## [5.1.6](https://github.com/casbin/node-casbin/compare/v5.1.5...v5.1.6) (2020-10-07) diff --git a/package.json b/package.json index 7fb3955f..9eda3ac2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.1.6", + "version": "5.2.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 4f3ba65429f91250485b8a0b070f16cb750955cd Mon Sep 17 00:00:00 2001 From: Alexey Yunoshev <33806564+alexey-yunoshev@users.noreply.github.com> Date: Sun, 15 Nov 2020 05:33:43 +0300 Subject: [PATCH 398/497] fix(rbac): fix defaultRoleManager hasRole method (#211) In the current version, defaultRoleManager hasRole always returns true if a matchingFunc is provided. This PR fixes it. Signed-off-by: Alexey Yunoshev --- src/rbac/defaultRoleManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index c0b91d78..51959550 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -99,7 +99,7 @@ class Roles extends Map { } else { return this.has(name); } - return true; + return ok; } public createRole(name: string, matchingFunc?: MatchingFunc): Role { From 22072feefceeacaca5ef2893bb3b4b8df88ae66b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 15 Nov 2020 02:41:19 +0000 Subject: [PATCH 399/497] chore(release): 5.2.1 [skip ci] ## [5.2.1](https://github.com/casbin/node-casbin/compare/v5.2.0...v5.2.1) (2020-11-15) ### Bug Fixes * **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/node-casbin/issues/211)) ([4f3ba65](https://github.com/casbin/node-casbin/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 813d3c7d..bbd2a7e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.2.1](https://github.com/casbin/node-casbin/compare/v5.2.0...v5.2.1) (2020-11-15) + + +### Bug Fixes + +* **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/node-casbin/issues/211)) ([4f3ba65](https://github.com/casbin/node-casbin/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) + # [5.2.0](https://github.com/casbin/node-casbin/compare/v5.1.6...v5.2.0) (2020-10-26) diff --git a/package.json b/package.json index 9eda3ac2..bc2434c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.2.0", + "version": "5.2.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 273ee3dd2182698ad0d8399b01461c1b80ff0f52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Nov 2020 22:51:38 +0000 Subject: [PATCH 400/497] chore(deps-dev): bump semantic-release from 15.14.0 to 17.2.3 Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 15.14.0 to 17.2.3. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v15.14.0...v17.2.3) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 510 +++++++++++++++++++++++++++++---------------------- 2 files changed, 289 insertions(+), 223 deletions(-) diff --git a/package.json b/package.json index bc2434c7..4252768e 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "prettier": "^2.1.2", "pretty-quick": "^3.0.2", "rimraf": "^2.6.2", - "semantic-release": "^15.13.31", + "semantic-release": "^17.2.3", "ts-jest": "^24.0.0", "tslint": "^5.11.0", "typescript": "^3.7.2" diff --git a/yarn.lock b/yarn.lock index 0a984588..da2340b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -437,6 +437,18 @@ dependencies: "@octokit/types" "^5.0.0" +"@octokit/core@^3.0.0": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.1.tgz#9e04df3f4e7f825ac0559327490ce34299140af5" + integrity sha512-XfFSDDwv6tclUenS0EmB6iA7u+4aOHBT1Lz4PtQNQQg3hBbNaR/+Uv5URU+egeIuuGAiMRiDyY92G4GBOWOqDA== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/graphql" "^4.3.1" + "@octokit/request" "^5.4.0" + "@octokit/types" "^5.0.0" + before-after-hook "^2.1.0" + universal-user-agent "^6.0.0" + "@octokit/endpoint@^6.0.1": version "6.0.8" resolved "https://registry.npm.taobao.org/@octokit/endpoint/download/@octokit/endpoint-6.0.8.tgz#91b07e236fdb69929c678c6439f7a560dc6058ac" @@ -446,35 +458,35 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.npm.taobao.org/@octokit/plugin-paginate-rest/download/@octokit/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha1-AEFwrPjCvlNauiZyeGfWkve0iPw= +"@octokit/graphql@^4.3.1": + version "4.5.7" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.5.7.tgz#f4562dcd9e80ea94602068e85aefac19a88f8578" + integrity sha512-Gk0AR+DcwIK/lK/GX+OQ99UqtenQhcbrhHHfOYlrCQe17ADnX3EKAOKRsAZ9qZvpi5MuwWm/Nm+9aO2kTDSdyA== dependencies: - "@octokit/types" "^2.0.1" + "@octokit/request" "^5.3.0" + "@octokit/types" "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/plugin-paginate-rest@^2.2.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.6.0.tgz#03416396e7a227b268c5b827365238f620a9c5c1" + integrity sha512-o+O8c1PqsC5++BHXfMZabRRsBIVb34tXPWyQLyp2IXq5MmkxdipS7TXM4Y9ldL1PzY9CTrCsn/lzFFJGM3oRRA== + dependencies: + "@octokit/types" "^5.5.0" "@octokit/plugin-request-log@^1.0.0": version "1.0.0" resolved "https://registry.npm.taobao.org/@octokit/plugin-request-log/download/@octokit/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" integrity sha1-7vh6QxMA9hSMOaf3X4z+shiyVH4= -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.npm.taobao.org/@octokit/plugin-rest-endpoint-methods/download/@octokit/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha1-Mojs9UgfaMSU3QYC/BVAeln69h4= +"@octokit/plugin-rest-endpoint-methods@4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.2.1.tgz#8224833a45c3394836dc6e86f1e6c49269a2c350" + integrity sha512-QyFr4Bv807Pt1DXZOC5a7L5aFdrwz71UHTYoHVajYV5hsqffWm8FUl9+O7nxRu5PDMtB/IKrhFqTmdBTK5cx+A== dependencies: - "@octokit/types" "^2.0.1" + "@octokit/types" "^5.5.0" deprecation "^2.3.1" -"@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha1-7eBxTHc/MjR1dsJWSdwBOuazGAE= - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - "@octokit/request-error@^2.0.0": version "2.0.2" resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" @@ -484,10 +496,10 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^5.2.0": - version "5.4.9" - resolved "https://registry.npm.taobao.org/@octokit/request/download/@octokit/request-5.4.9.tgz#0a46f11b82351b3416d3157261ad9b1558c43365" - integrity sha1-CkbxG4I1GzQW0xVyYa2bFVjEM2U= +"@octokit/request@^5.3.0", "@octokit/request@^5.4.0": + version "5.4.10" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.10.tgz#402d2c53768bde12b99348329ba4129746aebb9c" + integrity sha512-egA49HkqEORVGDZGav1mh+VD+7uLgOxtn5oODj6guJk0HCy+YBSYapFkSLFgeYj3Fr18ZULKGURkjyhkAChylw== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" @@ -498,36 +510,17 @@ once "^1.4.0" universal-user-agent "^6.0.0" -"@octokit/rest@^16.27.0": - version "16.43.2" - resolved "https://registry.npm.taobao.org/@octokit/rest/download/@octokit/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" - integrity sha1-xTQm8eHRBE3ulnAj4yecUJk92Rs= +"@octokit/rest@^18.0.0": + version "18.0.9" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.0.9.tgz#964d707d914eb34b1787895fdcacff96de47844d" + integrity sha512-CC5+cIx974Ygx9lQNfUn7/oXDQ9kqGiKUC6j1A9bAVZZ7aoTF8K6yxu0pQhQrLBwSl92J6Z3iVDhGhGFgISCZg== dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/core" "^3.0.0" + "@octokit/plugin-paginate-rest" "^2.2.0" "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" + "@octokit/plugin-rest-endpoint-methods" "4.2.1" -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.16.2" - resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-2.16.2.tgz?cache=0&sync_timestamp=1600028517947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Ftypes%2Fdownload%2F%40octokit%2Ftypes-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" - integrity sha1-TF+No8b+zz2hgRrvZ4/aA+2sNdI= - dependencies: - "@types/node" ">= 8" - -"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": +"@octokit/types@^5.0.0", "@octokit/types@^5.0.1", "@octokit/types@^5.5.0": version "5.5.0" resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-5.5.0.tgz?cache=0&sync_timestamp=1600028517947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Ftypes%2Fdownload%2F%40octokit%2Ftypes-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" integrity sha1-5fBujbISRsoQKqKERM2xOuF6E5s= @@ -551,10 +544,10 @@ fs-extra "^8.0.0" lodash "^4.17.4" -"@semantic-release/commit-analyzer@^6.1.0": - version "6.3.3" - resolved "https://registry.npm.taobao.org/@semantic-release/commit-analyzer/download/@semantic-release/commit-analyzer-6.3.3.tgz#885f7e46e2f0aef23a23be0904dbf18d6ece45ca" - integrity sha1-iF9+RuLwrvI6I74JBNvxjW7ORco= +"@semantic-release/commit-analyzer@^8.0.0": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz#5d2a37cd5a3312da0e3ac05b1ca348bf60b90bca" + integrity sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A== dependencies: conventional-changelog-angular "^5.0.0" conventional-commits-filter "^2.0.0" @@ -562,6 +555,7 @@ debug "^4.0.0" import-from "^3.0.0" lodash "^4.17.4" + micromatch "^4.0.2" "@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": version "2.2.0" @@ -584,50 +578,51 @@ micromatch "^4.0.0" p-reduce "^2.0.0" -"@semantic-release/github@^5.1.0": - version "5.5.8" - resolved "https://registry.npm.taobao.org/@semantic-release/github/download/@semantic-release/github-5.5.8.tgz#2c16d212ca057ba0b0553b6eb62ff0949cfbca6a" - integrity sha1-LBbSEsoFe6CwVTtuti/wlJz7ymo= +"@semantic-release/github@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-7.2.0.tgz#925f3efd91adabfc4bbe0de24b79fe1a8a38b4e2" + integrity sha512-tMRnWiiWb43whRHvbDGXq4DGEbKRi56glDpXDJZit4PIiwDPX7Kx3QzmwRtDOcG+8lcpGjpdPabYZ9NBxoI2mw== dependencies: - "@octokit/rest" "^16.27.0" + "@octokit/rest" "^18.0.0" "@semantic-release/error" "^2.2.0" aggregate-error "^3.0.0" bottleneck "^2.18.1" debug "^4.0.0" dir-glob "^3.0.0" - fs-extra "^8.0.0" - globby "^10.0.0" - http-proxy-agent "^3.0.0" - https-proxy-agent "^4.0.0" - issue-parser "^5.0.0" + fs-extra "^9.0.0" + globby "^11.0.0" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + issue-parser "^6.0.0" lodash "^4.17.4" mime "^2.4.3" p-filter "^2.0.0" p-retry "^4.0.0" url-join "^4.0.0" -"@semantic-release/npm@^5.0.5": - version "5.3.5" - resolved "https://registry.npm.taobao.org/@semantic-release/npm/download/@semantic-release/npm-5.3.5.tgz#4a83952056d32e1401e1078c3910a159afc0cba8" - integrity sha1-SoOVIFbTLhQB4QeMORChWa/Ay6g= +"@semantic-release/npm@^7.0.0": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-7.0.8.tgz#228b6327d9e9e9d0adc7bf37b8be3d6fc9744e3e" + integrity sha512-8c1TLwKB/xT5E1FNs5l4GFtaNTznHesJk7tw3pGSlVxRqDXa1EZI+DfziZlO58Wk3PpS2ecu661kvBdz9aMgYQ== dependencies: "@semantic-release/error" "^2.2.0" aggregate-error "^3.0.0" - execa "^3.2.0" - fs-extra "^8.0.0" + execa "^4.0.0" + fs-extra "^9.0.0" lodash "^4.17.15" nerf-dart "^1.0.0" - normalize-url "^4.0.0" - npm "^6.10.3" + normalize-url "^5.0.0" + npm "^6.14.8" rc "^1.2.8" read-pkg "^5.0.0" registry-auth-token "^4.0.0" - tempy "^0.3.0" + semver "^7.1.2" + tempy "^1.0.0" -"@semantic-release/release-notes-generator@^7.1.2": - version "7.3.5" - resolved "https://registry.npm.taobao.org/@semantic-release/release-notes-generator/download/@semantic-release/release-notes-generator-7.3.5.tgz#ed0941d5b594f18fa1d2667493c03e811f97c0ff" - integrity sha1-7QlB1bWU8Y+h0mZ0k8A+gR+XwP8= +"@semantic-release/release-notes-generator@^9.0.0": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.1.tgz#732d285d103064f2a64f08a32031551ebb4f918b" + integrity sha512-bOoTiH6SiiR0x2uywSNR7uZcRDl22IpZhj+Q5Bn0v+98MFtOMhCxFhbrKQjhbYoZw7vps1mvMRmFkp/g6R9cvQ== dependencies: conventional-changelog-angular "^5.0.0" conventional-changelog-writer "^4.0.0" @@ -640,6 +635,11 @@ lodash "^4.17.4" read-pkg-up "^7.0.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/babel__core@^7.1.0": version "7.1.10" resolved "https://registry.npm.taobao.org/@types/babel__core/download/@types/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" @@ -917,10 +917,12 @@ agent-base@4, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -agent-base@5: - version "5.1.1" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-5.1.1.tgz?cache=0&sync_timestamp=1593732673731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" - integrity sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw= +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" agent-base@~4.2.1: version "4.2.1" @@ -966,11 +968,18 @@ ansi-colors@^4.1.1: resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha1-y7muJWv3UK8eqzRPIpqif+lLo0g= -ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&sync_timestamp=1583072748255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= +ansi-escapes@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1167,10 +1176,10 @@ asynckit@^0.4.0: resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/atob-lite/download/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== atob@^2.1.2: version "2.1.2" @@ -1255,10 +1264,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -before-after-hook@^2.0.0: +before-after-hook@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/before-after-hook/download/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU= + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== bin-links@^1.1.2, bin-links@^1.1.8: version "1.1.8" @@ -1359,11 +1368,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/btoa-lite/download/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1979,6 +1983,11 @@ crypto-random-string@^1.0.0: resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz?cache=0&sync_timestamp=1599137690451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" resolved "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1573719337707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -2164,6 +2173,20 @@ del@^3.0.0: pify "^3.0.0" rimraf "^2.2.8" +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2328,12 +2351,12 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" -env-ci@^4.0.0: - version "4.5.2" - resolved "https://registry.npm.taobao.org/env-ci/download/env-ci-4.5.2.tgz#40b08825dcf4ed5b2cddd3d638190571cf96347a" - integrity sha1-QLCIJdz07Vss3dPWOBkFcc+WNHo= +env-ci@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.0.2.tgz#48b6687f8af8cdf5e31b8fcf2987553d085249d9" + integrity sha512-Xc41mKvjouTXD3Oy9AqySz1IeyvJvHZ20Twf5ZLYbNpPPIuCnL/qHCmNlD01LoNy0JTunw9HPYVptD19Ac7Mbw== dependencies: - execa "^3.2.0" + execa "^4.0.0" java-properties "^1.0.0" env-paths@^2.2.0: @@ -2954,6 +2977,16 @@ fs-extra@8.1.0, fs-extra@^8.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -3205,7 +3238,7 @@ globby@^10.0.0: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.1: +globby@^11.0.0, globby@^11.0.1: version "11.0.1" resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" integrity sha1-mivxB6Bo8//qvEmtcCx57ejP01c= @@ -3292,11 +3325,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3404,12 +3432,13 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" -http-proxy-agent@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-3.0.0.tgz#598f42dc815949a11e2c6dbfdf24cd8a4c165327" - integrity sha1-WY9C3IFZSaEeLG2/3yTNikwWUyc= +http-proxy-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - agent-base "5" + "@tootallnate/once" "1" + agent-base "6" debug "4" http-signature@~1.2.0: @@ -3429,12 +3458,12 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" - integrity sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs= +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: - agent-base "5" + agent-base "6" debug "4" human-signals@^1.1.1: @@ -3833,6 +3862,11 @@ is-path-cwd@^1.0.0: resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + is-path-in-cwd@^1.0.0: version "1.0.1" resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" @@ -3847,6 +3881,11 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -3967,10 +4006,10 @@ isstream@~0.1.2: resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -issue-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/issue-parser/download/issue-parser-5.0.0.tgz#0e22a40bc275b6c7da6ddf4a9b979e8ca9faf0d4" - integrity sha1-DiKkC8J1tsfabd9Km5eejKn68NQ= +issue-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== dependencies: lodash.capitalize "^4.2.1" lodash.escaperegexp "^4.1.2" @@ -4486,6 +4525,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -4912,11 +4960,6 @@ lodash.escaperegexp@^4.1.2: resolved "https://registry.npm.taobao.org/lodash.escaperegexp/download/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.npm.taobao.org/lodash.ismatch/download/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -4947,11 +4990,6 @@ lodash.restparam@*: resolved "https://registry.npm.taobao.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.npm.taobao.org/lodash.set/download/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4967,7 +5005,7 @@ lodash.union@~4.6.0: resolved "https://registry.npm.taobao.org/lodash.union/download/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= -lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: +lodash.uniq@~4.5.0: version "4.5.0" resolved "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= @@ -5054,11 +5092,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -macos-release@^2.2.0: - version "2.4.1" - resolved "https://registry.npm.taobao.org/macos-release/download/macos-release-2.4.1.tgz?cache=0&sync_timestamp=1595440450554&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmacos-release%2Fdownload%2Fmacos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" - integrity sha1-ZAM9Dsal5jdRVadLGh66jlCYIKw= - make-dir@^1.0.0: version "1.3.0" resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -5125,22 +5158,22 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked-terminal@^3.2.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/marked-terminal/download/marked-terminal-3.3.0.tgz#25ce0c0299285998c7636beaefc87055341ba1bd" - integrity sha1-Jc4MApkoWZjHY2vq78hwVTQbob0= +marked-terminal@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-4.1.0.tgz#01087372d3636dc7cb286475a1d6147187f500e0" + integrity sha512-5KllfAOW02WS6hLRQ7cNvGOxvKW1BKuXELH4EtbWfyWgxQhROoMxEvuQ/3fTgkNjledR0J48F4HbapvYp1zWkQ== dependencies: - ansi-escapes "^3.1.0" + ansi-escapes "^4.3.1" cardinal "^2.1.1" - chalk "^2.4.1" + chalk "^4.0.0" cli-table "^0.3.1" - node-emoji "^1.4.1" - supports-hyperlinks "^1.0.1" + node-emoji "^1.10.0" + supports-hyperlinks "^2.1.0" -marked@^0.7.0: - version "0.7.0" - resolved "https://registry.npm.taobao.org/marked/download/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" - integrity sha1-tkIB8FHScbHtwQoE0a6bdLuOXA4= +marked@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.4.tgz#94e99230b03496c9383b1322ac51bc17dd388a1d" + integrity sha512-6x5TFGCTKSQBLTZtOburGxCxFEBJEGYVLwCMTBCxzvyuisGcC20UNzDSJhCr/cJ/Kmh6ulfJm10g6WWEAJ3kvg== matcher@^1.0.0: version "1.1.1" @@ -5419,10 +5452,10 @@ nice-try@^1.0.4: resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= -node-emoji@^1.4.1: +node-emoji@^1.10.0: version "1.10.0" - resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== dependencies: lodash.toarray "^4.4.0" @@ -5503,10 +5536,10 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-url@^4.0.0: - version "4.5.0" - resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha1-RTNUCH5sqWlXvY9br3U/WYIUISk= +normalize-url@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-5.3.0.tgz#8959b3cdaa295b61592c1f245dded34b117618dd" + integrity sha512-9/nOVLYYe/dO/eJeQUNaGUF4m4Z5E7cb9oNTKabH+bNf19mqj60txTcveQxL0GlcWLXCxkOu2/LwL8oW0idIDA== npm-audit-report@^1.3.3: version "1.3.3" @@ -5659,10 +5692,10 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npm@^6.10.3: +npm@^6.14.8: version "6.14.8" - resolved "https://registry.npm.taobao.org/npm/download/npm-6.14.8.tgz?cache=0&sync_timestamp=1602010800178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm%2Fdownload%2Fnpm-6.14.8.tgz#64ef754345639bc035982ec3f609353c8539033c" - integrity sha1-ZO91Q0Vjm8A1mC7D9gk1PIU5Azw= + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.8.tgz#64ef754345639bc035982ec3f609353c8539033c" + integrity sha512-HBZVBMYs5blsj94GTeQZel7s9odVuuSUHy1+AlZh7rPVux1os2ashvEGLy/STNK7vUjbrCg5Kq9/GXisJgdf6A== dependencies: JSONStream "^1.3.5" abbrev "~1.1.1" @@ -5682,6 +5715,7 @@ npm@^6.10.3: cmd-shim "^3.0.3" columnify "~1.5.4" config-chain "^1.1.12" + debuglog "*" detect-indent "~5.0.0" detect-newline "^2.1.0" dezalgo "~1.0.3" @@ -5696,6 +5730,7 @@ npm@^6.10.3: has-unicode "~2.0.1" hosted-git-info "^2.8.8" iferr "^1.0.2" + imurmurhash "*" infer-owner "^1.0.4" inflight "~1.0.6" inherits "^2.0.4" @@ -5714,8 +5749,14 @@ npm@^6.10.3: libnpx "^10.2.4" lock-verify "^2.1.0" lockfile "^1.0.4" + lodash._baseindexof "*" lodash._baseuniq "~4.6.0" + lodash._bindcallback "*" + lodash._cacheindexof "*" + lodash._createcache "*" + lodash._getnative "*" lodash.clonedeep "~4.5.0" + lodash.restparam "*" lodash.union "~4.6.0" lodash.uniq "~4.5.0" lodash.without "~4.4.0" @@ -5861,11 +5902,6 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/octokit-pagination-methods/download/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha1-z0cu3J1VEFX573P25CtNu0yAvqQ= - once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -5930,14 +5966,6 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/os-name/download/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha1-3sGdlmKW4c1i1wGlpm7h3ernCAE= - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -5958,6 +5986,11 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + p-filter@^2.0.0: version "2.1.0" resolved "https://registry.npm.taobao.org/p-filter/download/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" @@ -6008,7 +6041,7 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-locate@^4.0.0, p-locate@^4.1.0: +p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= @@ -6025,6 +6058,13 @@ p-map@^2.0.0: resolved "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -6867,6 +6907,13 @@ rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimra dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -6943,21 +6990,21 @@ sax@^1.2.4: resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= -semantic-release@^15.13.31: - version "15.14.0" - resolved "https://registry.npm.taobao.org/semantic-release/download/semantic-release-15.14.0.tgz#6ee79b7b3598332378190412880049709fa23376" - integrity sha1-buebezWYMyN4GQQSiABJcJ+iM3Y= +semantic-release@^17.2.3: + version "17.2.3" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-17.2.3.tgz#11f10b851d4e75b1015b17515c433049b3df994c" + integrity sha512-MY1MlowGQrkOR7+leOD8ICkVOC6i1szbwDODdbJ0UdshtMx8Ms0bhpRQmEEliqYKEb5PLv/dqs6zKKuHT7UxTg== dependencies: - "@semantic-release/commit-analyzer" "^6.1.0" + "@semantic-release/commit-analyzer" "^8.0.0" "@semantic-release/error" "^2.2.0" - "@semantic-release/github" "^5.1.0" - "@semantic-release/npm" "^5.0.5" - "@semantic-release/release-notes-generator" "^7.1.2" + "@semantic-release/github" "^7.0.0" + "@semantic-release/npm" "^7.0.0" + "@semantic-release/release-notes-generator" "^9.0.0" aggregate-error "^3.0.0" cosmiconfig "^6.0.0" debug "^4.0.0" - env-ci "^4.0.0" - execa "^3.2.0" + env-ci "^5.0.0" + execa "^4.0.0" figures "^3.0.0" find-versions "^3.0.0" get-stream "^5.0.0" @@ -6965,13 +7012,15 @@ semantic-release@^15.13.31: hook-std "^2.0.0" hosted-git-info "^3.0.0" lodash "^4.17.15" - marked "^0.7.0" - marked-terminal "^3.2.0" - p-locate "^4.0.0" + marked "^1.0.0" + marked-terminal "^4.0.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" p-reduce "^2.0.0" read-pkg-up "^7.0.0" resolve-from "^5.0.0" - semver "^6.0.0" + semver "^7.3.2" + semver-diff "^3.1.1" signale "^1.2.1" yargs "^15.0.1" @@ -6987,6 +7036,13 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + semver-regex@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" @@ -6997,12 +7053,12 @@ semver-regex@^2.0.0: resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= -semver@^6.0.0, semver@^6.2.0: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= -semver@^7.2.1, semver@^7.3.2: +semver@^7.1.2, semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg= @@ -7544,7 +7600,7 @@ supports-color@^2.0.0: resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.0.0, supports-color@^5.3.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= @@ -7558,20 +7614,20 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= dependencies: has-flag "^4.0.0" -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha1-cdrt82zBBgrFEAw1G7PaSMKcDvc= +supports-hyperlinks@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" + has-flag "^4.0.0" + supports-color "^7.0.0" symbol-observable@^1.1.0: version "1.2.0" @@ -7611,19 +7667,21 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: safe-buffer "^5.1.2" yallist "^3.0.3" -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/temp-dir/download/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== -tempy@^0.3.0: - version "0.3.0" - resolved "https://registry.npm.taobao.org/tempy/download/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" - integrity sha1-b2xbKVaVoWEwmWrVqwGovXJui/g= +tempy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.0.tgz#4f192b3ee3328a2684d0e3fc5c491425395aab65" + integrity sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w== dependencies: - temp-dir "^1.0.0" - type-fest "^0.3.1" - unique-string "^1.0.0" + del "^6.0.0" + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" term-size@^1.2.0: version "1.2.0" @@ -7852,15 +7910,20 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + type-fest@^0.13.1: version "0.13.1" resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.13.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha1-AXLLW86AsL1ULqNI21DH4hg02TQ= -type-fest@^0.3.1: - version "0.3.1" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.3.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha1-Y9ANIE4FlHT+Xht8ARESu9HcKeE= +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== type-fest@^0.6.0: version "0.6.0" @@ -7928,12 +7991,12 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/universal-user-agent/download/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha1-/Y1st3OmeacJ6WfvgoijH8wD5Vc= +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - os-name "^3.1.0" + crypto-random-string "^2.0.0" universal-user-agent@^6.0.0: version "6.0.0" @@ -7945,6 +8008,16 @@ universalify@^0.1.0: resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -8158,13 +8231,6 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" -windows-release@^3.1.0: - version "3.3.3" - resolved "https://registry.npm.taobao.org/windows-release/download/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" - integrity sha1-HBACfHIldD7sa4nfFg1kwuApOZk= - dependencies: - execa "^1.0.0" - word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" From 1245aa072b47135b49cb70abeed0796908a8feb7 Mon Sep 17 00:00:00 2001 From: Andreas Bichinger Date: Thu, 26 Nov 2020 22:36:28 +0100 Subject: [PATCH 401/497] fix(builtinoperators): fix function keyMatch3 fix #214 Signed-off-by: Andreas Bichinger --- src/util/builtinOperators.ts | 2 +- test/util.test.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 1ab496a0..5c48c8b3 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -88,7 +88,7 @@ function keyMatch3(key1: string, key2: string): boolean { key2 = key2.replace(regexp, '$1[^/]+$2'); } - return regexMatch(key1, key2); + return regexMatch(key1, '^' + key2 + '$'); } // keyMatch3Func is the wrapper for keyMatch3. diff --git a/test/util.test.ts b/test/util.test.ts index 487f6d39..722d9485 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -54,6 +54,7 @@ test('test keyMatch2Func', () => { expect(util.keyMatch2Func('/foo/baz', '/foo/:bar')).toEqual(true); expect(util.keyMatch2Func('/foo/baz/foo', '/foo/:bar/foo')).toEqual(true); expect(util.keyMatch2Func('/baz', '/foo')).toEqual(false); + expect(util.keyMatch2Func('/foo/baz', '/foo')).toEqual(false); }); test('test keyMatch3Func', () => { @@ -61,6 +62,7 @@ test('test keyMatch3Func', () => { expect(util.keyMatch3Func('/foo/baz', '/foo/{bar}')).toEqual(true); expect(util.keyMatch3Func('/foo/baz/foo', '/foo/{bar}/foo')).toEqual(true); expect(util.keyMatch3Func('/baz', '/foo')).toEqual(false); + expect(util.keyMatch3Func('/foo/baz', '/foo')).toEqual(false); }); test('test keyMatch4Func', () => { From 3ee86b2a8cc379ba1cf1f85578f61741ae4609c2 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 29 Nov 2020 12:42:46 +0800 Subject: [PATCH 402/497] ci: migrate from travis to github actions (#216) Signed-off-by: Zixuan Liu --- .github/workflows/main.yml | 48 ++++++++++++++++++++++++++++++++++++++ .gitignore | 1 + .travis.yml | 28 ---------------------- package.json | 3 ++- 4 files changed, 51 insertions(+), 29 deletions(-) create mode 100644 .github/workflows/main.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..73bf7aa0 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,48 @@ +name: main +on: [push, pull_request] +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + node-version: [^10, ^12, ^14] + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: yarn install --ignore-engines + - run: yarn lint + - run: yarn test + - run: yarn coverage + - name: Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + flag-name: run-${{ matrix.node-version }} + parallel: true + + semantic-release: + needs: [test] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Run semantic-release + if: github.repository == 'casbin/node-casbin' && github.event_name == 'push' + run: yarn install --no-lockfile && yarn semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + finish: + needs: test + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true diff --git a/.gitignore b/.gitignore index 15888299..2096cdbf 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules lib yarn-error.log package-lock.json +coverage diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 940ae010..00000000 --- a/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -language: node_js - -sudo: false - -node_js: - - '10' - - '11' - - '12' - - 'stable' - -install: yarn install --ignore-engines - -script: - - yarn run lint - - yarn run test - -jobs: - include: - - stage: Produce Coverage - node_js: node - script: jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage - - stage: release - node_js: lts/* - deploy: - provider: script - skip_cleanup: true - script: - - yarn semantic-release diff --git a/package.json b/package.json index 4252768e..623d1c59 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "fmt": "eslint . --ext .js,.ts --fix", "semantic-release": "semantic-release", "commit": "git-cz", - "clean": "rimraf lib" + "clean": "rimraf lib", + "coverage": "jest --coverage" }, "devDependencies": { "@semantic-release/changelog": "^3.0.6", From 2c2f28b91d6ffa2fb74ef545db1d451d8bbdd149 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 29 Nov 2020 04:46:07 +0000 Subject: [PATCH 403/497] chore(release): 5.2.2 [skip ci] ## [5.2.2](https://github.com/casbin/node-casbin/compare/v5.2.1...v5.2.2) (2020-11-29) ### Bug Fixes * **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/node-casbin/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/node-casbin/issues/214) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbd2a7e4..01b57dfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.2.2](https://github.com/casbin/node-casbin/compare/v5.2.1...v5.2.2) (2020-11-29) + + +### Bug Fixes + +* **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/node-casbin/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/node-casbin/issues/214) + ## [5.2.1](https://github.com/casbin/node-casbin/compare/v5.2.0...v5.2.1) (2020-11-15) diff --git a/package.json b/package.json index 623d1c59..c6da6b54 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.2.1", + "version": "5.2.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 515e0d3c197897cda09314cd8a78119894d148d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Dec 2020 06:43:46 +0000 Subject: [PATCH 404/497] chore(deps): bump ini from 1.3.5 to 1.3.8 Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index da2340b2..597ac4a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3605,9 +3605,9 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc= + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== init-package-json@^1.10.3: version "1.10.3" From 7dfcf93a2eb7a9c9116f55341537a4c81840e3d4 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 18 Dec 2020 22:52:41 +0800 Subject: [PATCH 405/497] fix: downgrade target from ESNext to ES2017 for building esm Signed-off-by: Zixuan Liu --- tsconfig.esm.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.esm.json b/tsconfig.esm.json index 05ee7100..1ce8fca4 100644 --- a/tsconfig.esm.json +++ b/tsconfig.esm.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig", "compilerOptions": { - "target": "ESNext", + "target": "ES2017", "module": "ESNext", "outDir": "lib/esm" } From 5c15d7bce2b89f0bffdbc88f5b55d0d8354f0d08 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 8 Jan 2021 22:05:56 +0800 Subject: [PATCH 406/497] chore(release): 5.2.3 [skip ci] (#220) ## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2020-12-19) ### Bug Fixes * downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) Co-authored-by: semantic-release-bot --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01b57dfe..32233e7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2020-12-19) + + +### Bug Fixes + +* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) + ## [5.2.2](https://github.com/casbin/node-casbin/compare/v5.2.1...v5.2.2) (2020-11-29) diff --git a/package.json b/package.json index c6da6b54..a1e03899 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.2.2", + "version": "5.2.3", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 08004dc812808ddc89c638542a2ddb95281be073 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 8 Jan 2021 22:25:22 +0800 Subject: [PATCH 407/497] ci: update semantic-release (#221) Signed-off-by: Zixuan Liu --- package.json | 10 +- test/c.json | 117 ++++++ yarn.lock | 1034 ++++++++++++++++++++++++++------------------------ 3 files changed, 664 insertions(+), 497 deletions(-) create mode 100644 test/c.json diff --git a/package.json b/package.json index a1e03899..017ea407 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,12 @@ "coverage": "jest --coverage" }, "devDependencies": { - "@semantic-release/changelog": "^3.0.6", - "@semantic-release/git": "^7.0.18", + "@semantic-release/changelog": "^5.0.1", + "@semantic-release/commit-analyzer": "^8.0.1", + "@semantic-release/git": "^9.0.0", + "@semantic-release/github": "^7.2.0", + "@semantic-release/npm": "^7.0.9", + "@semantic-release/release-notes-generator": "^9.0.1", "@types/ip": "^0.0.31", "@types/jest": "^24.0.11", "@types/lodash": "^4.14.113", @@ -41,7 +45,7 @@ "prettier": "^2.1.2", "pretty-quick": "^3.0.2", "rimraf": "^2.6.2", - "semantic-release": "^17.2.3", + "semantic-release": "^17.3.1", "ts-jest": "^24.0.0", "tslint": "^5.11.0", "typescript": "^3.7.2" diff --git a/test/c.json b/test/c.json new file mode 100644 index 00000000..dbaf165b --- /dev/null +++ b/test/c.json @@ -0,0 +1,117 @@ +{ + "StreamConfig": {}, + "State": { + "Running": true, + "Paused": false, + "Restarting": false, + "OOMKilled": false, + "RemovalInProgress": false, + "Dead": false, + "Pid": 2315, + "ExitCode": 0, + "Error": "", + "StartedAt": "2020-12-15T08:31:34.77819295Z", + "FinishedAt": "2020-12-15T08:28:47.213660759Z", + "Health": null + }, + "ID": "dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8", + "Created": "2020-12-15T06:47:06.3240563Z", + "Managed": false, + "Path": "/sbin/init", + "Args": [], + "Config": { + "Hostname": "dfb05b22e200", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "Tty": true, + "OpenStdin": true, + "StdinOnce": false, + "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], + "Cmd": ["/sbin/init"], + "Image": "centos:7", + "Volumes": null, + "WorkingDir": "", + "Entrypoint": null, + "OnBuild": null, + "Labels": { + "org.label-schema.build-date": "20201113", + "org.label-schema.license": "GPLv2", + "org.label-schema.name": "CentOS Base Image", + "org.label-schema.schema-version": "1.0", + "org.label-schema.vendor": "CentOS", + "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00", + "org.opencontainers.image.licenses": "GPL-2.0-only", + "org.opencontainers.image.title": "CentOS Base Image", + "org.opencontainers.image.vendor": "CentOS" + } + }, + "Image": "sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "f2bd13904b89f5d8ae5c5b7a8210a3af849233b7c34cc65f22d4f69e8223e200", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "Networks": { + "bridge": { + "IPAMConfig": null, + "Links": null, + "Aliases": null, + "NetworkID": "c79a6a5b585f09c38c27b0f55054b41cef4de330e259481997f890ff56b367e8", + "EndpointID": "961a7d7968dfa9fb95dba61e94a62c9b9c520039f56a32e10db36c13e8e38afb", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.3", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:11:00:03", + "DriverOpts": null, + "IPAMOperational": false + } + }, + "PortBindings": { + "3306/tcp": [ + { + "HostIp": "", + "HostPort": "33060" + } + ], + "80/tcp": [ + { + "HostIp": "", + "HostPort": "8081" + } + ] + }, + "Service": null, + "Ports": {}, + "SandboxKey": "/var/run/docker/netns/f2bd13904b89", + "SecondaryIPAddresses": null, + "SecondaryIPv6Addresses": null, + "IsAnonymousEndpoint": false, + "HasSwarmEndpoint": false + }, + "LogPath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8-json.log", + "Name": "/lnut_practice_centos7", + "Driver": "overlay2", + "OS": "linux", + "MountLabel": "", + "ProcessLabel": "", + "RestartCount": 0, + "HasBeenStartedBefore": true, + "HasBeenManuallyStopped": false, + "MountPoints": {}, + "SecretReferences": null, + "ConfigReferences": null, + "AppArmorProfile": "", + "HostnamePath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/hostname", + "HostsPath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/hosts", + "ShmPath": "", + "ResolvConfPath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/resolv.conf", + "SeccompProfile": "", + "NoNewPrivileges": false +} diff --git a/yarn.lock b/yarn.lock index 597ac4a9..17ccab42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,14 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": +"@babel/code-frame@^7.0.0": + version "7.12.11" + resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz?cache=0&sync_timestamp=1608075239039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8= + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha1-Fo2ho26Q2miujUnA8bSMfGJJITo= @@ -121,9 +128,9 @@ "@babel/types" "^7.11.0" "@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593522720715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI= + version "7.12.11" + resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.12.11.tgz?cache=0&sync_timestamp=1608075248751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha1-yaHwIZF9y1zPDU5FPjmQIpgfye0= "@babel/helpers@^7.10.4": version "7.10.4" @@ -409,101 +416,106 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha1-Olgr21OATGum0UZXnEblITDPSjs= +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.4.tgz?cache=0&sync_timestamp=1609074440839&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha1-1LNUml213iaD4MEHGrTxQJBLv2k= dependencies: - "@nodelib/fs.stat" "2.0.3" + "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M= +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha1-o/LdYbq0O424+hCKEhz//kxnZlU= "@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY= + version "1.2.6" + resolved "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.6.tgz?cache=0&sync_timestamp=1609077069715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha1-zOk5azCqWv6eN1Zgj1gxrctT0GM= dependencies: - "@nodelib/fs.scandir" "2.1.3" + "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@octokit/auth-token@^2.4.0": - version "2.4.2" - resolved "https://registry.npm.taobao.org/@octokit/auth-token/download/@octokit/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" - integrity sha1-ENCul5sQD6a3L6Do5j4n5tDb/4o= +"@octokit/auth-token@^2.4.4": + version "2.4.4" + resolved "https://registry.npm.taobao.org/@octokit/auth-token/download/@octokit/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" + integrity sha1-7jHGmwHQN4wS/T/+QGAw89lNO1Y= dependencies: - "@octokit/types" "^5.0.0" + "@octokit/types" "^6.0.0" -"@octokit/core@^3.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.1.tgz#9e04df3f4e7f825ac0559327490ce34299140af5" - integrity sha512-XfFSDDwv6tclUenS0EmB6iA7u+4aOHBT1Lz4PtQNQQg3hBbNaR/+Uv5URU+egeIuuGAiMRiDyY92G4GBOWOqDA== +"@octokit/core@^3.2.3": + version "3.2.4" + resolved "https://registry.npm.taobao.org/@octokit/core/download/@octokit/core-3.2.4.tgz#5791256057a962eca972e31818f02454897fd106" + integrity sha1-V5ElYFepYuypcuMYGPAkVIl/0QY= dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/graphql" "^4.3.1" - "@octokit/request" "^5.4.0" - "@octokit/types" "^5.0.0" + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.4.12" + "@octokit/types" "^6.0.3" before-after-hook "^2.1.0" universal-user-agent "^6.0.0" "@octokit/endpoint@^6.0.1": - version "6.0.8" - resolved "https://registry.npm.taobao.org/@octokit/endpoint/download/@octokit/endpoint-6.0.8.tgz#91b07e236fdb69929c678c6439f7a560dc6058ac" - integrity sha1-kbB+I2/baZKcZ4xkOfelYNxgWKw= + version "6.0.10" + resolved "https://registry.npm.taobao.org/@octokit/endpoint/download/@octokit/endpoint-6.0.10.tgz#741ce1fa2f4fb77ce8ebe0c6eaf5ce63f565f8e8" + integrity sha1-dBzh+i9Pt3zo6+DG6vXOY/Vl+Og= dependencies: - "@octokit/types" "^5.0.0" + "@octokit/types" "^6.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/graphql@^4.3.1": - version "4.5.7" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.5.7.tgz#f4562dcd9e80ea94602068e85aefac19a88f8578" - integrity sha512-Gk0AR+DcwIK/lK/GX+OQ99UqtenQhcbrhHHfOYlrCQe17ADnX3EKAOKRsAZ9qZvpi5MuwWm/Nm+9aO2kTDSdyA== +"@octokit/graphql@^4.5.8": + version "4.5.8" + resolved "https://registry.npm.taobao.org/@octokit/graphql/download/@octokit/graphql-4.5.8.tgz#d42373633c3015d0eafce64a8ce196be167fdd9b" + integrity sha1-1CNzYzwwFdDq/OZKjOGWvhZ/3Zs= dependencies: "@octokit/request" "^5.3.0" - "@octokit/types" "^5.0.0" + "@octokit/types" "^6.0.0" universal-user-agent "^6.0.0" -"@octokit/plugin-paginate-rest@^2.2.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.6.0.tgz#03416396e7a227b268c5b827365238f620a9c5c1" - integrity sha512-o+O8c1PqsC5++BHXfMZabRRsBIVb34tXPWyQLyp2IXq5MmkxdipS7TXM4Y9ldL1PzY9CTrCsn/lzFFJGM3oRRA== +"@octokit/openapi-types@^2.2.0": + version "2.2.0" + resolved "https://registry.npm.taobao.org/@octokit/openapi-types/download/@octokit/openapi-types-2.2.0.tgz#123e0438a0bc718ccdac3b5a2e69b3dd00daa85b" + integrity sha1-Ej4EOKC8cYzNrDtaLmmz3QDaqFs= + +"@octokit/plugin-paginate-rest@^2.6.2": + version "2.7.0" + resolved "https://registry.npm.taobao.org/@octokit/plugin-paginate-rest/download/@octokit/plugin-paginate-rest-2.7.0.tgz#6bb7b043c246e0654119a6ec4e72a172c9e2c7f3" + integrity sha1-a7ewQ8JG4GVBGabsTnKhcsnix/M= dependencies: - "@octokit/types" "^5.5.0" + "@octokit/types" "^6.0.1" -"@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.npm.taobao.org/@octokit/plugin-request-log/download/@octokit/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - integrity sha1-7vh6QxMA9hSMOaf3X4z+shiyVH4= +"@octokit/plugin-request-log@^1.0.2": + version "1.0.2" + resolved "https://registry.npm.taobao.org/@octokit/plugin-request-log/download/@octokit/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" + integrity sha1-OU1Z7HNM0vEiQx+68FCZhh7OPEQ= -"@octokit/plugin-rest-endpoint-methods@4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.2.1.tgz#8224833a45c3394836dc6e86f1e6c49269a2c350" - integrity sha512-QyFr4Bv807Pt1DXZOC5a7L5aFdrwz71UHTYoHVajYV5hsqffWm8FUl9+O7nxRu5PDMtB/IKrhFqTmdBTK5cx+A== +"@octokit/plugin-rest-endpoint-methods@4.4.1": + version "4.4.1" + resolved "https://registry.npm.taobao.org/@octokit/plugin-rest-endpoint-methods/download/@octokit/plugin-rest-endpoint-methods-4.4.1.tgz#105cf93255432155de078c9efc33bd4e14d1cd63" + integrity sha1-EFz5MlVDIVXeB4ye/DO9ThTRzWM= dependencies: - "@octokit/types" "^5.5.0" + "@octokit/types" "^6.1.0" deprecation "^2.3.1" "@octokit/request-error@^2.0.0": - version "2.0.2" - resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" - integrity sha1-Dna4P12P3aHbmQJ+pfYXwua6ntA= + version "2.0.4" + resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-2.0.4.tgz#07dd5c0521d2ee975201274c472a127917741262" + integrity sha1-B91cBSHS7pdSASdMRyoSeRd0EmI= dependencies: - "@octokit/types" "^5.0.1" + "@octokit/types" "^6.0.0" deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^5.3.0", "@octokit/request@^5.4.0": - version "5.4.10" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.10.tgz#402d2c53768bde12b99348329ba4129746aebb9c" - integrity sha512-egA49HkqEORVGDZGav1mh+VD+7uLgOxtn5oODj6guJk0HCy+YBSYapFkSLFgeYj3Fr18ZULKGURkjyhkAChylw== +"@octokit/request@^5.3.0", "@octokit/request@^5.4.12": + version "5.4.12" + resolved "https://registry.npm.taobao.org/@octokit/request/download/@octokit/request-5.4.12.tgz#b04826fa934670c56b135a81447be2c1723a2ffc" + integrity sha1-sEgm+pNGcMVrE1qBRHviwXI6L/w= dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" - "@octokit/types" "^5.0.0" + "@octokit/types" "^6.0.3" deprecation "^2.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.1" @@ -511,20 +523,21 @@ universal-user-agent "^6.0.0" "@octokit/rest@^18.0.0": - version "18.0.9" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.0.9.tgz#964d707d914eb34b1787895fdcacff96de47844d" - integrity sha512-CC5+cIx974Ygx9lQNfUn7/oXDQ9kqGiKUC6j1A9bAVZZ7aoTF8K6yxu0pQhQrLBwSl92J6Z3iVDhGhGFgISCZg== + version "18.0.12" + resolved "https://registry.npm.taobao.org/@octokit/rest/download/@octokit/rest-18.0.12.tgz#278bd41358c56d87c201e787e8adc0cac132503a" + integrity sha1-J4vUE1jFbYfCAeeH6K3AysEyUDo= dependencies: - "@octokit/core" "^3.0.0" - "@octokit/plugin-paginate-rest" "^2.2.0" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "4.2.1" + "@octokit/core" "^3.2.3" + "@octokit/plugin-paginate-rest" "^2.6.2" + "@octokit/plugin-request-log" "^1.0.2" + "@octokit/plugin-rest-endpoint-methods" "4.4.1" -"@octokit/types@^5.0.0", "@octokit/types@^5.0.1", "@octokit/types@^5.5.0": - version "5.5.0" - resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-5.5.0.tgz?cache=0&sync_timestamp=1600028517947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40octokit%2Ftypes%2Fdownload%2F%40octokit%2Ftypes-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" - integrity sha1-5fBujbISRsoQKqKERM2xOuF6E5s= +"@octokit/types@^6.0.0", "@octokit/types@^6.0.1", "@octokit/types@^6.0.3", "@octokit/types@^6.1.0": + version "6.2.1" + resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-6.2.1.tgz#7f881fe44475ab1825776a4a59ca1ae082ed1043" + integrity sha1-f4gf5ER1qxgld2pKWcoa4ILtEEM= dependencies: + "@octokit/openapi-types" "^2.2.0" "@types/node" ">= 8" "@samverschueren/stream-to-observable@^0.3.0": @@ -534,20 +547,20 @@ dependencies: any-observable "^0.3.0" -"@semantic-release/changelog@^3.0.6": - version "3.0.6" - resolved "https://registry.npm.taobao.org/@semantic-release/changelog/download/@semantic-release/changelog-3.0.6.tgz#9d68d68bf732cbba1034c028bb6720091f783b2a" - integrity sha1-nWjWi/cyy7oQNMAou2cgCR94Oyo= +"@semantic-release/changelog@^5.0.1": + version "5.0.1" + resolved "https://registry.npm.taobao.org/@semantic-release/changelog/download/@semantic-release/changelog-5.0.1.tgz#50a84b63e5d391b7debfe021421589fa2bcdafe4" + integrity sha1-UKhLY+XTkbfev+AhQhWJ+ivNr+Q= dependencies: "@semantic-release/error" "^2.1.0" aggregate-error "^3.0.0" - fs-extra "^8.0.0" + fs-extra "^9.0.0" lodash "^4.17.4" -"@semantic-release/commit-analyzer@^8.0.0": +"@semantic-release/commit-analyzer@^8.0.0", "@semantic-release/commit-analyzer@^8.0.1": version "8.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz#5d2a37cd5a3312da0e3ac05b1ca348bf60b90bca" - integrity sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A== + resolved "https://registry.npm.taobao.org/@semantic-release/commit-analyzer/download/@semantic-release/commit-analyzer-8.0.1.tgz#5d2a37cd5a3312da0e3ac05b1ca348bf60b90bca" + integrity sha1-XSo3zVozEtoOOsBbHKNIv2C5C8o= dependencies: conventional-changelog-angular "^5.0.0" conventional-commits-filter "^2.0.0" @@ -562,26 +575,24 @@ resolved "https://registry.npm.taobao.org/@semantic-release/error/download/@semantic-release/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" integrity sha1-7p1aCcmWnq3h7IZHdq7aXFzdu/A= -"@semantic-release/git@^7.0.18": - version "7.0.18" - resolved "https://registry.npm.taobao.org/@semantic-release/git/download/@semantic-release/git-7.0.18.tgz#f37c076bc094762cb343dab49ab893d31de961e8" - integrity sha1-83wHa8CUdiyzQ9q0mriT0x3pYeg= +"@semantic-release/git@^9.0.0": + version "9.0.0" + resolved "https://registry.npm.taobao.org/@semantic-release/git/download/@semantic-release/git-9.0.0.tgz#304c4883c87d095b1faaae93300f1f1e0466e9a5" + integrity sha1-MExIg8h9CVsfqq6TMA8fHgRm6aU= dependencies: "@semantic-release/error" "^2.1.0" aggregate-error "^3.0.0" debug "^4.0.0" dir-glob "^3.0.0" - execa "^3.2.0" - fs-extra "^8.0.0" - globby "^10.0.0" + execa "^4.0.0" lodash "^4.17.4" micromatch "^4.0.0" p-reduce "^2.0.0" -"@semantic-release/github@^7.0.0": +"@semantic-release/github@^7.0.0", "@semantic-release/github@^7.2.0": version "7.2.0" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-7.2.0.tgz#925f3efd91adabfc4bbe0de24b79fe1a8a38b4e2" - integrity sha512-tMRnWiiWb43whRHvbDGXq4DGEbKRi56glDpXDJZit4PIiwDPX7Kx3QzmwRtDOcG+8lcpGjpdPabYZ9NBxoI2mw== + resolved "https://registry.npm.taobao.org/@semantic-release/github/download/@semantic-release/github-7.2.0.tgz#925f3efd91adabfc4bbe0de24b79fe1a8a38b4e2" + integrity sha1-kl8+/ZGtq/xLvg3iS3n+Goo4tOI= dependencies: "@octokit/rest" "^18.0.0" "@semantic-release/error" "^2.2.0" @@ -600,14 +611,14 @@ p-retry "^4.0.0" url-join "^4.0.0" -"@semantic-release/npm@^7.0.0": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-7.0.8.tgz#228b6327d9e9e9d0adc7bf37b8be3d6fc9744e3e" - integrity sha512-8c1TLwKB/xT5E1FNs5l4GFtaNTznHesJk7tw3pGSlVxRqDXa1EZI+DfziZlO58Wk3PpS2ecu661kvBdz9aMgYQ== +"@semantic-release/npm@^7.0.0", "@semantic-release/npm@^7.0.9": + version "7.0.9" + resolved "https://registry.npm.taobao.org/@semantic-release/npm/download/@semantic-release/npm-7.0.9.tgz#a49d80d0f96a52cd70f9ce4e78fac5be70f24844" + integrity sha1-pJ2A0PlqUs1w+c5OePrFvnDySEQ= dependencies: "@semantic-release/error" "^2.2.0" aggregate-error "^3.0.0" - execa "^4.0.0" + execa "^5.0.0" fs-extra "^9.0.0" lodash "^4.17.15" nerf-dart "^1.0.0" @@ -619,10 +630,10 @@ semver "^7.1.2" tempy "^1.0.0" -"@semantic-release/release-notes-generator@^9.0.0": +"@semantic-release/release-notes-generator@^9.0.0", "@semantic-release/release-notes-generator@^9.0.1": version "9.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.1.tgz#732d285d103064f2a64f08a32031551ebb4f918b" - integrity sha512-bOoTiH6SiiR0x2uywSNR7uZcRDl22IpZhj+Q5Bn0v+98MFtOMhCxFhbrKQjhbYoZw7vps1mvMRmFkp/g6R9cvQ== + resolved "https://registry.npm.taobao.org/@semantic-release/release-notes-generator/download/@semantic-release/release-notes-generator-9.0.1.tgz#732d285d103064f2a64f08a32031551ebb4f918b" + integrity sha1-cy0oXRAwZPKmTwijIDFVHrtPkYs= dependencies: conventional-changelog-angular "^5.0.0" conventional-changelog-writer "^4.0.0" @@ -637,8 +648,8 @@ "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + resolved "https://registry.npm.taobao.org/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha1-zLkURTYBeaBOf+av94wA/8Hur4I= "@types/babel__core@^7.1.0": version "7.1.10" @@ -678,14 +689,6 @@ resolved "https://registry.npm.taobao.org/@types/braces/download/@types/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" integrity sha1-faHA1E/xx+tmCjbsB46mG6frQss= -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha1-5rqA82t9qtLGhazZJmOC5omFwYM= - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - "@types/ip@^0.0.31": version "0.0.31" resolved "https://registry.npm.taobao.org/@types/ip/download/@types/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" @@ -737,21 +740,26 @@ dependencies: "@types/braces" "*" -"@types/minimatch@*", "@types/minimatch@^3.0.3": +"@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&sync_timestamp=1596839015387&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0= "@types/minimist@^1.2.0": - version "1.2.0" - resolved "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" - integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= + version "1.2.1" + resolved "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha1-KD9mn/dte4Jg34q3pCYsyD2YglY= -"@types/node@*", "@types/node@>= 8": +"@types/node@*": version "14.11.5" resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-14.11.5.tgz?cache=0&sync_timestamp=1601963426754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.11.5.tgz#fecad41c041cae7f2404ad4b2d0742fdb628b305" integrity sha1-/srUHAQcrn8kBK1LLQdC/bYoswU= +"@types/node@>= 8": + version "14.14.20" + resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" + integrity sha1-95dIY+3SHR+KSUpz6OKzZYYVw0A= + "@types/node@^10.5.3": version "10.17.37" resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.37.tgz?cache=0&sync_timestamp=1601963426754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.37.tgz#40d03db879993799c3819e298b003f055e8ecafe" @@ -759,17 +767,17 @@ "@types/normalize-package-data@^2.4.0": version "2.4.0" - resolved "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz?cache=0&sync_timestamp=1596839336899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + resolved "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4= "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1605055243639&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= "@types/retry@^0.12.0": version "0.12.0" - resolved "https://registry.npm.taobao.org/@types/retry/download/@types/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + resolved "https://registry.npm.taobao.org/@types/retry/download/@types/retry-0.12.0.tgz?cache=0&sync_timestamp=1605057731420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fretry%2Fdownload%2F%40types%2Fretry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha1-KzXsz87n04zXKtmSMvvVi/+zyE0= "@types/stack-utils@^1.0.1": @@ -912,21 +920,21 @@ acorn@^7.4.0: agent-base@4, agent-base@^4.3.0: version "4.3.0" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz?cache=0&sync_timestamp=1593732673731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4= dependencies: es6-promisify "^5.0.0" agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c= dependencies: debug "4" agent-base@~4.2.1: version "4.2.1" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz?cache=0&sync_timestamp=1593732673731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" integrity sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk= dependencies: es6-promisify "^5.0.0" @@ -946,7 +954,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: version "6.12.5" resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" integrity sha1-GbDouuj0duW6ZmMAOHd1+xoApNo= @@ -956,6 +964,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -975,8 +993,8 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: ansi-escapes@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&sync_timestamp=1583072748255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE= dependencies: type-fest "^0.11.0" @@ -1007,14 +1025,14 @@ ansi-styles@^2.2.1: ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1606792314427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606792314427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= dependencies: color-convert "^2.0.1" @@ -1178,8 +1196,8 @@ asynckit@^0.4.0: at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + resolved "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha1-YCzUtG6EStTv/JKoARo8RuAjjcI= atob@^2.1.2: version "2.1.2" @@ -1197,9 +1215,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.10.1.tgz?cache=0&sync_timestamp=1597237013644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg= + version "1.11.0" + resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101421225&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk= babel-jest@^24.9.0: version "24.9.0" @@ -1266,8 +1284,8 @@ bcrypt-pbkdf@^1.0.0: before-after-hook@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + resolved "https://registry.npm.taobao.org/before-after-hook/download/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU= bin-links@^1.1.2, bin-links@^1.1.8: version "1.1.8" @@ -1300,7 +1318,7 @@ bottleneck@^2.18.1: boxen@^1.2.1: version "1.3.0" - resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz?cache=0&sync_timestamp=1609220982141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fboxen%2Fdownload%2Fboxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= dependencies: ansi-align "^2.0.0" @@ -1313,7 +1331,7 @@ boxen@^1.2.1: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898201980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= dependencies: balanced-match "^1.0.0" @@ -1395,7 +1413,7 @@ byte-size@^5.0.1: cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: version "12.0.4" - resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1594427999421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" integrity sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw= dependencies: bluebird "^3.5.5" @@ -1434,6 +1452,14 @@ cachedir@2.2.0: resolved "https://registry.npm.taobao.org/cachedir/download/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" integrity sha1-Ga+kMF4F155BdWaILgyPlg9i/w4= +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.0.tgz?cache=0&sync_timestamp=1604115081161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha1-JBJwVLs/m9y0sfuCQYGGBy93uM4= + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + call-limit@^1.1.1: version "1.1.1" resolved "https://registry.npm.taobao.org/call-limit/download/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" @@ -1474,12 +1500,12 @@ camelcase-keys@^6.2.2: camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= capture-exit@^2.0.0: @@ -1582,12 +1608,12 @@ class-utils@^0.3.5: clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035220754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= cli-boxes@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz?cache=0&sync_timestamp=1598866401325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-boxes%2Fdownload%2Fcli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= cli-columns@^3.1.2: @@ -1616,11 +1642,12 @@ cli-table3@^0.5.0, cli-table3@^0.5.1: colors "^1.1.2" cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.npm.taobao.org/cli-table/download/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= + version "0.3.4" + resolved "https://registry.npm.taobao.org/cli-table/download/cli-table-0.3.4.tgz#5b37fd723751f1a6e9e70d55953a75e16eab958e" + integrity sha1-Wzf9cjdR8abp5w1VlTp14W6rlY4= dependencies: - colors "1.0.3" + chalk "^2.4.1" + string-width "^4.2.0" cli-truncate@^0.2.1: version "0.2.1" @@ -1637,7 +1664,7 @@ cli-width@^2.0.0: cliui@^3.2.0: version "3.2.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz?cache=0&sync_timestamp=1597607836462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: string-width "^1.0.1" @@ -1646,7 +1673,7 @@ cliui@^3.2.0: cliui@^5.0.0: version "5.0.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1597607836462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= dependencies: string-width "^3.1.0" @@ -1655,7 +1682,7 @@ cliui@^5.0.0: cliui@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1597607836462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" integrity sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE= dependencies: string-width "^4.2.0" @@ -1717,11 +1744,6 @@ color-name@~1.1.4: resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= -colors@1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/colors/download/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - colors@^1.1.2: version "1.4.0" resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -1805,7 +1827,7 @@ config-chain@^1.1.12: configstore@^3.0.0: version "3.1.5" - resolved "https://registry.npm.taobao.org/configstore/download/configstore-3.1.5.tgz?cache=0&sync_timestamp=1597607673944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconfigstore%2Fdownload%2Fconfigstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + resolved "https://registry.npm.taobao.org/configstore/download/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" integrity sha1-6a8zH63BTavVRNPn523ERqCaUw8= dependencies: dot-prop "^4.2.1" @@ -1821,53 +1843,53 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control- integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= conventional-changelog-angular@^5.0.0: - version "5.0.11" - resolved "https://registry.npm.taobao.org/conventional-changelog-angular/download/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb" - integrity sha1-maPKFuSlMF4MLC+uPvdP12Mfw/s= + version "5.0.12" + resolved "https://registry.npm.taobao.org/conventional-changelog-angular/download/conventional-changelog-angular-5.0.12.tgz?cache=0&sync_timestamp=1604539725902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-changelog-angular%2Fdownload%2Fconventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha1-yXm4uSHL/iZALrPaW7/aAthlork= dependencies: compare-func "^2.0.0" q "^1.5.1" conventional-changelog-writer@^4.0.0: - version "4.0.17" - resolved "https://registry.npm.taobao.org/conventional-changelog-writer/download/conventional-changelog-writer-4.0.17.tgz?cache=0&sync_timestamp=1596849078623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-changelog-writer%2Fdownload%2Fconventional-changelog-writer-4.0.17.tgz#4753aaa138bf5aa59c0b274cb5937efcd2722e21" - integrity sha1-R1OqoTi/WqWcCydMtZN+/NJyLiE= + version "4.1.0" + resolved "https://registry.npm.taobao.org/conventional-changelog-writer/download/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" + integrity sha1-HKeIC3WqKGla0zMSofI2b0sSZZ8= dependencies: compare-func "^2.0.0" - conventional-commits-filter "^2.0.6" + conventional-commits-filter "^2.0.7" dateformat "^3.0.0" handlebars "^4.7.6" json-stringify-safe "^5.0.1" lodash "^4.17.15" - meow "^7.0.0" + meow "^8.0.0" semver "^6.0.0" split "^1.0.0" - through2 "^3.0.0" + through2 "^4.0.0" conventional-commit-types@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/conventional-commit-types/download/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" integrity sha1-fJIU5Y6uk+hd1m2/uv5+T/+iNls= -conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.6: - version "2.0.6" - resolved "https://registry.npm.taobao.org/conventional-commits-filter/download/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c" - integrity sha1-CTXhJAxcp2mDKa/+4bakbTMyTEw= +conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.npm.taobao.org/conventional-commits-filter/download/conventional-commits-filter-2.0.7.tgz?cache=0&sync_timestamp=1604542867941&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-filter%2Fdownload%2Fconventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha1-+Nm08YL84Aya9xOdpJNlsTbIoLM= dependencies: lodash.ismatch "^4.4.0" modify-values "^1.0.0" conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: - version "3.1.0" - resolved "https://registry.npm.taobao.org/conventional-commits-parser/download/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4" - integrity sha1-EBQGc9Xn71VyYzeRRWxdA7aei+Q= + version "3.2.0" + resolved "https://registry.npm.taobao.org/conventional-commits-parser/download/conventional-commits-parser-3.2.0.tgz?cache=0&sync_timestamp=1604539710083&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-parser%2Fdownload%2Fconventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" + integrity sha1-niYbE5ykt7KbzrvFRGDaNolABMo= dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" lodash "^4.17.15" - meow "^7.0.0" + meow "^8.0.0" split2 "^2.0.0" - through2 "^3.0.0" + through2 "^4.0.0" trim-off-newlines "^1.0.0" convert-source-map@^1.4.0, convert-source-map@^1.7.0: @@ -1911,7 +1933,7 @@ cosmiconfig@^5.2.0: cosmiconfig@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI= dependencies: "@types/parse-json" "^4.0.0" @@ -1951,7 +1973,7 @@ create-error-class@^3.0.0: cross-spawn@^5.0.1: version "5.1.0" - resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz?cache=0&sync_timestamp=1609302869441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" @@ -1969,9 +1991,9 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz?cache=0&sync_timestamp=1609302869441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= dependencies: path-key "^3.1.0" @@ -1985,8 +2007,8 @@ crypto-random-string@^1.0.0: crypto-random-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-2.0.0.tgz?cache=0&sync_timestamp=1599137690451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha1-7yp6lm7BEIM4g2m6oC6+rSKbMNU= cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" @@ -2035,7 +2057,7 @@ cz-conventional-changelog@^3.2.0: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073381998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" @@ -2061,15 +2083,15 @@ dateformat@^3.0.0: debug@3.1.0: version "3.1.0" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1607566517339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.2.0" - resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E= +debug@4, debug@^4.0.0: + version "4.3.1" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566517339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4= dependencies: ms "2.1.2" @@ -2081,13 +2103,20 @@ debug@^2.2.0, debug@^2.3.3: ms "2.0.0" debug@^3.1.0: - version "3.2.6" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= + version "3.2.7" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566517339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o= dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E= + dependencies: + ms "2.1.2" + +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -2175,8 +2204,8 @@ del@^3.0.0: del@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + resolved "https://registry.npm.taobao.org/del/download/del-6.0.0.tgz?cache=0&sync_timestamp=1601076936089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha1-C0DQMyzqdD8WFPgYvk/rcXcUyVI= dependencies: globby "^11.0.1" graceful-fs "^4.2.4" @@ -2263,21 +2292,21 @@ domexception@^1.0.1: dot-prop@^4.2.1: version "4.2.1" - resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.1.tgz?cache=0&sync_timestamp=1602107326908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" integrity sha1-RYhBlKcfws2nHLtLzrOk3S9DO6Q= dependencies: is-obj "^1.0.0" dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1602107326908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= dependencies: is-obj "^2.0.0" dotenv@^5.0.1: version "5.0.1" - resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-5.0.1.tgz?cache=0&sync_timestamp=1571190782798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" integrity sha1-pTF0Wb09eauIz/bkQFemo/ux/O8= duplexer2@~0.1.0: @@ -2322,12 +2351,12 @@ elegant-spinner@^1.0.1: emoji-regex@^7.0.1: version "7.0.3" - resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212229889&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212229889&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= encoding@^0.1.11: @@ -2353,8 +2382,8 @@ enquirer@^2.3.5: env-ci@^5.0.0: version "5.0.2" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.0.2.tgz#48b6687f8af8cdf5e31b8fcf2987553d085249d9" - integrity sha512-Xc41mKvjouTXD3Oy9AqySz1IeyvJvHZ20Twf5ZLYbNpPPIuCnL/qHCmNlD01LoNy0JTunw9HPYVptD19Ac7Mbw== + resolved "https://registry.npm.taobao.org/env-ci/download/env-ci-5.0.2.tgz#48b6687f8af8cdf5e31b8fcf2987553d085249d9" + integrity sha1-SLZof4r4zfXjG4/PKYdVPQhSSdk= dependencies: execa "^4.0.0" java-properties "^1.0.0" @@ -2370,9 +2399,9 @@ err-code@^1.0.0: integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@~0.1.7: - version "0.1.7" - resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg= + version "0.1.8" + resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8= dependencies: prr "~1.0.1" @@ -2383,7 +2412,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: version "1.17.7" resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" integrity sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw= @@ -2400,7 +2429,7 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-abstract@^1.18.0-next.0: +es-abstract@^1.18.0-next.1: version "1.18.0-next.1" resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" integrity sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= @@ -2441,7 +2470,7 @@ es6-promisify@^5.0.0: escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.9.1: @@ -2588,7 +2617,7 @@ exec-sh@^0.3.2: execa@^0.7.0: version "0.7.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" @@ -2612,10 +2641,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha1-wI7UVQ72XYWPrCaf/IVyRG8364k= +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha1-TlSRrRVy8vF6d9OIxshXE1sihHo= dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -2624,23 +2653,22 @@ execa@^3.2.0: merge-stream "^2.0.0" npm-run-path "^4.0.0" onetime "^5.1.0" - p-finally "^2.0.0" signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^4.0.0: - version "4.0.3" - resolved "https://registry.npm.taobao.org/execa/download/execa-4.0.3.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha1-CjTau61tZhAL1vLFdshmlAPzF/I= +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha1-QCmwAHmYqEH70QMuX03oajweM3Y= dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exit@^0.1.2: @@ -2750,7 +2778,7 @@ fast-diff@^1.1.2: resolved "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM= -fast-glob@^3.0.3, fast-glob@^3.1.1: +fast-glob@^3.1.1: version "3.2.4" resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592290280465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" integrity sha1-0grvv5lXk4Pn88xmUpFYybmFVNM= @@ -2773,9 +2801,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha1-VQ4fn1m7xl/hhctqm02VNXEH9IE= + version "1.10.0" + resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.10.0.tgz?cache=0&sync_timestamp=1608465812256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha1-dNvvzK3pZJMs31AEc+8wJxnGUrs= dependencies: reusify "^1.0.4" @@ -2882,12 +2910,12 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-versions@^3.0.0: - version "3.2.0" - resolved "https://registry.npm.taobao.org/find-versions/download/find-versions-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-versions%2Fdownload%2Ffind-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" - integrity sha1-ECl/mAMKeGgpaBaQVF72We0dJU4= +find-versions@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/find-versions/download/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha1-PFflc7+XdpuMuN8Wk0tieRXaSWU= dependencies: - semver-regex "^2.0.0" + semver-regex "^3.1.2" findup-sync@^3.0.0: version "3.0.0" @@ -2968,7 +2996,7 @@ from2@^2.1.0, from2@^2.3.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@8.1.0, fs-extra@^8.0.0: +fs-extra@8.1.0: version "8.1.0" resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1591231538901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= @@ -2979,8 +3007,8 @@ fs-extra@8.1.0, fs-extra@^8.0.0: fs-extra@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-9.0.1.tgz?cache=0&sync_timestamp=1591231538901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha1-kQ2gBiQ3ukw5/t2GPxZ1zP78ufw= dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" @@ -3096,6 +3124,15 @@ get-caller-file@^2.0.1: resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= +get-intrinsic@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.0.2.tgz?cache=0&sync_timestamp=1608274246879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-intrinsic%2Fdownload%2Fget-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha1-aCDaIm5QskiU4IhZRp3Gg2FUXUk= + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&sync_timestamp=1575993577501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -3130,6 +3167,11 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-6.0.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha1-PgASy2gnMZ2icG5gGhWD6GKaZxg= + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -3224,24 +3266,10 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -globby@^10.0.0: - version "10.0.2" - resolved "https://registry.npm.taobao.org/globby/download/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha1-J3WT50WsqkZGw6tBEonsR6A5JUM= - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - globby@^11.0.0, globby@^11.0.1: - version "11.0.1" - resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha1-mivxB6Bo8//qvEmtcCx57ejP01c= + version "11.0.2" + resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.2.tgz?cache=0&sync_timestamp=1609936472420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha1-GvU4t2ajtUDr+1ijKy4tWJcyHYM= dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -3263,7 +3291,7 @@ globby@^6.1.0: got@^6.7.1: version "6.7.1" - resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz?cache=0&sync_timestamp=1607658223946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgot%2Fdownload%2Fgot-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= dependencies: create-error-class "^3.0.0" @@ -3397,13 +3425,13 @@ hook-std@^2.0.0: hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: version "2.8.8" - resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1594428020608&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg= -hosted-git-info@^3.0.0: - version "3.0.5" - resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.5.tgz?cache=0&sync_timestamp=1594428020608&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-3.0.5.tgz#bea87905ef7317442e8df3087faa3c842397df03" - integrity sha1-vqh5Be9zF0QujfMIf6o8hCOX3wM= +hosted-git-info@^3.0.0, hosted-git-info@^3.0.6: + version "3.0.7" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" + integrity sha1-owcnOF6oWs/O6U4KrZ42jHkuA2w= dependencies: lru-cache "^6.0.0" @@ -3434,8 +3462,8 @@ http-proxy-agent@^2.1.0: http-proxy-agent@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha1-ioyO9/WTLM+VPClsqCkblap0qjo= dependencies: "@tootallnate/once" "1" agent-base "6" @@ -3460,8 +3488,8 @@ https-proxy-agent@^2.2.3: https-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha1-4qkFQqu2inYuCghQ9sntrf2FBrI= dependencies: agent-base "6" debug "4" @@ -3471,6 +3499,11 @@ human-signals@^1.1.1: resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA= + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -3530,7 +3563,7 @@ ignore@^4.0.6: resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= -ignore@^5.1.1, ignore@^5.1.4: +ignore@^5.1.4: version "5.1.8" resolved "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha1-8VCotQo0KJsz4i9YiavU2AFvDlc= @@ -3543,7 +3576,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.2.1" resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY= @@ -3551,6 +3584,14 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-fresh@^3.1.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.3.0.tgz?cache=0&sync_timestamp=1608469520900&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-from@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/import-from/download/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" @@ -3571,7 +3612,7 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -3604,14 +3645,14 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.8.tgz?cache=0&sync_timestamp=1607907802342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= init-package-json@^1.10.3: version "1.10.3" - resolved "https://registry.npm.taobao.org/init-package-json/download/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + resolved "https://registry.npm.taobao.org/init-package-json/download/init-package-json-1.10.3.tgz?cache=0&sync_timestamp=1602900788385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finit-package-json%2Fdownload%2Finit-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" integrity sha1-Rf/i9hCoyhNPK9HbVjeyNQcPbL4= dependencies: glob "^7.1.1" @@ -3722,6 +3763,13 @@ is-cidr@^3.0.0: dependencies: cidr-regex "^2.0.10" +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411557629&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha1-lwN+89UiJNhRY/VZeytj2a/tmBo= + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3819,9 +3867,9 @@ is-installed-globally@^0.1.0: is-path-inside "^1.0.0" is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + version "2.0.1" + resolved "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.1.tgz?cache=0&sync_timestamp=1607126733599&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-negative-zero%2Fdownload%2Fis-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ= is-npm@^1.0.0: version "1.0.0" @@ -3864,8 +3912,8 @@ is-path-cwd@^1.0.0: is-path-cwd@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= is-path-in-cwd@^1.0.0: version "1.0.1" @@ -3876,15 +3924,15 @@ is-path-in-cwd@^1.0.0: is-path-inside@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz?cache=0&sync_timestamp=1569835754259&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-inside%2Fdownload%2Fis-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-path-inside@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha1-9SIPyCo+IzdXKR3dycWHfyofMBc= is-plain-obj@^1.1.0: version "1.1.0" @@ -3915,7 +3963,7 @@ is-redirect@^1.0.0: is-regex@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555746435&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k= dependencies: has-symbols "^1.0.1" @@ -3927,7 +3975,7 @@ is-regexp@^1.0.0: is-retry-allowed@^1.0.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + resolved "https://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz?cache=0&sync_timestamp=1609095675616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-retry-allowed%2Fdownload%2Fis-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha1-13hIi9CkZmo76KFIK58rqv7eqLQ= is-stream@^1.0.0, is-stream@^1.1.0: @@ -4008,8 +4056,8 @@ isstream@~0.1.2: issue-parser@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" - integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== + resolved "https://registry.npm.taobao.org/issue-parser/download/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha1-se3QYxXU8gRKl1Xa+F/a/em0AUo= dependencies: lodash.capitalize "^4.2.1" lodash.escaperegexp "^4.1.2" @@ -4527,8 +4575,8 @@ jsonfile@^4.0.0: jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.1.0.tgz?cache=0&sync_timestamp=1604164898625&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4= dependencies: universalify "^2.0.0" optionalDependencies: @@ -4696,7 +4744,7 @@ libnpmconfig@^1.2.1: libnpmhook@^5.0.3: version "5.0.3" - resolved "https://registry.npm.taobao.org/libnpmhook/download/libnpmhook-5.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flibnpmhook%2Fdownload%2Flibnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + resolved "https://registry.npm.taobao.org/libnpmhook/download/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" integrity sha1-QCDA9e2/COvjlTJcql6gGIW5KPc= dependencies: aproba "^2.0.0" @@ -4900,11 +4948,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.npm.taobao.org/lodash._baseindexof/download/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.npm.taobao.org/lodash._baseuniq/download/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -4913,33 +4956,11 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.npm.taobao.org/lodash._bindcallback/download/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.npm.taobao.org/lodash._cacheindexof/download/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.npm.taobao.org/lodash._createcache/download/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.npm.taobao.org/lodash._createset/download/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.npm.taobao.org/lodash._root/download/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -4985,11 +5006,6 @@ lodash.memoize@4.x: resolved "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz?cache=0&sync_timestamp=1589682725270&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.memoize%2Fdownload%2Flodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.npm.taobao.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -5094,7 +5110,7 @@ lru-cache@^6.0.0: make-dir@^1.0.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= dependencies: pify "^3.0.0" @@ -5114,7 +5130,7 @@ make-error@1.x: make-fetch-happen@^5.0.0: version "5.0.2" - resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1595371321873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1607473831765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" integrity sha1-qoOHEE8mh+3KAchofuRQE9AtGb0= dependencies: agentkeepalive "^3.4.1" @@ -5160,8 +5176,8 @@ map-visit@^1.0.0: marked-terminal@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-4.1.0.tgz#01087372d3636dc7cb286475a1d6147187f500e0" - integrity sha512-5KllfAOW02WS6hLRQ7cNvGOxvKW1BKuXELH4EtbWfyWgxQhROoMxEvuQ/3fTgkNjledR0J48F4HbapvYp1zWkQ== + resolved "https://registry.npm.taobao.org/marked-terminal/download/marked-terminal-4.1.0.tgz#01087372d3636dc7cb286475a1d6147187f500e0" + integrity sha1-AQhzctNjbcfLKGR1odYUcYf1AOA= dependencies: ansi-escapes "^4.3.1" cardinal "^2.1.1" @@ -5171,9 +5187,9 @@ marked-terminal@^4.0.0: supports-hyperlinks "^2.1.0" marked@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.4.tgz#94e99230b03496c9383b1322ac51bc17dd388a1d" - integrity sha512-6x5TFGCTKSQBLTZtOburGxCxFEBJEGYVLwCMTBCxzvyuisGcC20UNzDSJhCr/cJ/Kmh6ulfJm10g6WWEAJ3kvg== + version "1.2.7" + resolved "https://registry.npm.taobao.org/marked/download/marked-1.2.7.tgz?cache=0&sync_timestamp=1608123294281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarked%2Fdownload%2Fmarked-1.2.7.tgz#6e14b595581d2319cdcf033a24caaf41455a01fb" + integrity sha1-bhS1lVgdIxnNzwM6JMqvQUVaAfs= matcher@^1.0.0: version "1.1.1" @@ -5183,9 +5199,9 @@ matcher@^1.0.0: escape-string-regexp "^1.0.4" meant@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/meant/download/meant-1.0.2.tgz?cache=0&sync_timestamp=1595295635022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeant%2Fdownload%2Fmeant-1.0.2.tgz#5d0c78310a3d8ae1408a16be0fe0bd42a969f560" - integrity sha1-XQx4MQo9iuFAiha+D+C9Qqlp9WA= + version "1.0.3" + resolved "https://registry.npm.taobao.org/meant/download/meant-1.0.3.tgz?cache=0&sync_timestamp=1605608237621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeant%2Fdownload%2Fmeant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" + integrity sha1-Z3aa+d4dFYdz6SiugsRWEUkDVUw= mem@^1.1.0: version "1.1.0" @@ -5199,29 +5215,29 @@ memorystream@^0.3.1: resolved "https://registry.npm.taobao.org/memorystream/download/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= -meow@^7.0.0: - version "7.1.1" - resolved "https://registry.npm.taobao.org/meow/download/meow-7.1.1.tgz?cache=0&sync_timestamp=1598693367626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" - integrity sha1-fAFZXj0zf8sOxOju0WZuqVkD0wY= +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.npm.taobao.org/meow/download/meow-8.1.2.tgz?cache=0&sync_timestamp=1610076688294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha1-vL5FvaDuFynTUMA8/8g5WjbE6Jc= dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" decamelize-keys "^1.1.0" hard-rejection "^2.1.0" minimist-options "4.1.0" - normalize-package-data "^2.5.0" + normalize-package-data "^3.0.0" read-pkg-up "^7.0.1" redent "^3.0.0" trim-newlines "^3.0.0" - type-fest "^0.13.1" - yargs-parser "^18.1.3" + type-fest "^0.18.0" + yargs-parser "^20.2.3" merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= @@ -5258,22 +5274,22 @@ micromatch@^4.0.0, micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831212519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I= +mime-db@1.45.0: + version "1.45.0" + resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.45.0.tgz?cache=0&sync_timestamp=1600831212519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha1-zO7aIczXw6dF66LezVXUtz54eeo= mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8= + version "2.1.28" + resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.28.tgz?cache=0&sync_timestamp=1609560276293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha1-EWDEdX6rLFNjiI4AUnPs950qDs0= dependencies: - mime-db "1.44.0" + mime-db "1.45.0" mime@^2.4.3: - version "2.4.6" - resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596728112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE= + version "2.4.7" + resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.7.tgz?cache=0&sync_timestamp=1608084044938&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha1-lirtm+DtGckf19wuzl1/TompDXQ= mimic-fn@^1.0.0: version "1.2.0" @@ -5308,7 +5324,7 @@ minimist-options@4.1.0: minimist@1.2.5, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1584051509720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: @@ -5352,7 +5368,7 @@ mixin-deep@^1.2.0: mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: version "0.5.5" - resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= dependencies: minimist "^1.2.5" @@ -5381,14 +5397,19 @@ mri@^1.1.5: ms@2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: +ms@2.1.2: version "2.1.2" - resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= + multimatch@^4.0.0: version "4.0.0" resolved "https://registry.npm.taobao.org/multimatch/download/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -5454,8 +5475,8 @@ nice-try@^1.0.4: node-emoji@^1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= dependencies: lodash.toarray "^4.4.0" @@ -5475,7 +5496,7 @@ node-fetch@^2.6.1: node-gyp@^5.0.2, node-gyp@^5.1.0: version "5.1.1" - resolved "https://registry.npm.taobao.org/node-gyp/download/node-gyp-5.1.1.tgz?cache=0&sync_timestamp=1597202690285&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + resolved "https://registry.npm.taobao.org/node-gyp/download/node-gyp-5.1.1.tgz?cache=0&sync_timestamp=1602900896887&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" integrity sha1-65Ffe2Mck30oLjOu1Ey3oCX2Kj4= dependencies: env-paths "^2.2.0" @@ -5513,7 +5534,7 @@ node-notifier@^5.4.2: nopt@^4.0.1, nopt@^4.0.3: version "4.0.3" - resolved "https://registry.npm.taobao.org/nopt/download/nopt-4.0.3.tgz?cache=0&sync_timestamp=1597649956050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + resolved "https://registry.npm.taobao.org/nopt/download/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" integrity sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg= dependencies: abbrev "1" @@ -5529,6 +5550,16 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha1-H4p8Qjs9LoXrNpher4HeOB0BMBo= + dependencies: + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -5538,8 +5569,8 @@ normalize-path@^2.1.1: normalize-url@^5.0.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-5.3.0.tgz#8959b3cdaa295b61592c1f245dded34b117618dd" - integrity sha512-9/nOVLYYe/dO/eJeQUNaGUF4m4Z5E7cb9oNTKabH+bNf19mqj60txTcveQxL0GlcWLXCxkOu2/LwL8oW0idIDA== + resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-5.3.0.tgz?cache=0&sync_timestamp=1602432879767&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-5.3.0.tgz#8959b3cdaa295b61592c1f245dded34b117618dd" + integrity sha1-iVmzzaopW2FZLB8kXd7TSxF2GN0= npm-audit-report@^1.3.3: version "1.3.3" @@ -5594,7 +5625,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: version "6.1.1" - resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz?cache=0&sync_timestamp=1602550521207&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-package-arg%2Fdownload%2Fnpm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" integrity sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc= dependencies: hosted-git-info "^2.7.1" @@ -5638,7 +5669,7 @@ npm-profile@^4.0.2, npm-profile@^4.0.4: npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: version "4.0.7" - resolved "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.7.tgz?cache=0&sync_timestamp=1597697876643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-registry-fetch%2Fdownload%2Fnpm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" + resolved "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" integrity sha1-V5Ub9lQeAkazTJ+aOKtzYHyUSdc= dependencies: JSONStream "^1.3.4" @@ -5671,17 +5702,17 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo= dependencies: path-key "^3.0.0" -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/npm-user-validate/download/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= +npm-user-validate@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/npm-user-validate/download/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" + integrity sha1-MUKPxUdf6EFgI/F4wKtHk1rYxWE= npm-which@^3.0.1: version "3.0.1" @@ -5693,9 +5724,9 @@ npm-which@^3.0.1: which "^1.2.10" npm@^6.14.8: - version "6.14.8" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.8.tgz#64ef754345639bc035982ec3f609353c8539033c" - integrity sha512-HBZVBMYs5blsj94GTeQZel7s9odVuuSUHy1+AlZh7rPVux1os2ashvEGLy/STNK7vUjbrCg5Kq9/GXisJgdf6A== + version "6.14.11" + resolved "https://registry.npm.taobao.org/npm/download/npm-6.14.11.tgz?cache=0&sync_timestamp=1610071027467&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm%2Fdownload%2Fnpm-6.14.11.tgz#e0b5598d7b9a42d275e61d8bd28cd7eee0074a3b" + integrity sha1-4LVZjXuaQtJ15h2L0ozX7uAHSjs= dependencies: JSONStream "^1.3.5" abbrev "~1.1.1" @@ -5715,7 +5746,6 @@ npm@^6.14.8: cmd-shim "^3.0.3" columnify "~1.5.4" config-chain "^1.1.12" - debuglog "*" detect-indent "~5.0.0" detect-newline "^2.1.0" dezalgo "~1.0.3" @@ -5730,11 +5760,10 @@ npm@^6.14.8: has-unicode "~2.0.1" hosted-git-info "^2.8.8" iferr "^1.0.2" - imurmurhash "*" infer-owner "^1.0.4" inflight "~1.0.6" inherits "^2.0.4" - ini "^1.3.5" + ini "^1.3.8" init-package-json "^1.10.3" is-cidr "^3.0.0" json-parse-better-errors "^1.0.2" @@ -5749,14 +5778,8 @@ npm@^6.14.8: libnpx "^10.2.4" lock-verify "^2.1.0" lockfile "^1.0.4" - lodash._baseindexof "*" lodash._baseuniq "~4.6.0" - lodash._bindcallback "*" - lodash._cacheindexof "*" - lodash._createcache "*" - lodash._getnative "*" lodash.clonedeep "~4.5.0" - lodash.restparam "*" lodash.union "~4.6.0" lodash.uniq "~4.5.0" lodash.without "~4.4.0" @@ -5777,10 +5800,10 @@ npm@^6.14.8: npm-pick-manifest "^3.0.2" npm-profile "^4.0.4" npm-registry-fetch "^4.0.7" - npm-user-validate "~1.0.0" + npm-user-validate "^1.0.1" npmlog "~4.1.2" once "~1.4.0" - opener "^1.5.1" + opener "^1.5.2" osenv "^0.1.5" pacote "^9.5.12" path-is-inside "~1.0.2" @@ -5861,9 +5884,9 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545152574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA= + version "1.9.0" + resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.9.0.tgz?cache=0&sync_timestamp=1606804277230&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo= object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -5878,16 +5901,25 @@ object-visit@^1.0.0: isobject "^3.0.0" object.assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.1.tgz?cache=0&sync_timestamp=1599844895115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" - integrity sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0= + version "4.1.2" + resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz?cache=0&sync_timestamp=1604115085770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA= dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.0" has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: +object.getownpropertydescriptors@^2.0.3: + version "2.1.1" + resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.1.tgz?cache=0&sync_timestamp=1606458133144&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha1-Df2o0QgHTZxWPoBJDIg7ZmEJFUQ= + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +object.getownpropertydescriptors@^2.1.0: version "2.1.0" resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" integrity sha1-Npvx+VktiridcS3O1cuBx8U1Jkk= @@ -5916,14 +5948,14 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005190531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= dependencies: mimic-fn "^2.1.0" -opener@^1.5.1: +opener@^1.5.2: version "1.5.2" resolved "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1598733439329&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopener%2Fdownload%2Fopener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha1-XTfh81B3udysQwE3InGv3rKhNZg= @@ -5959,7 +5991,7 @@ os-homedir@^1.0.0: os-locale@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz?cache=0&sync_timestamp=1584865550362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" integrity sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I= dependencies: execa "^0.7.0" @@ -5988,8 +6020,8 @@ p-each-series@^1.0.0: p-each-series@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + resolved "https://registry.npm.taobao.org/p-each-series/download/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha1-EFqwNXznKyAqiouUkzZyZXteKpo= p-filter@^2.0.0: version "2.1.0" @@ -6003,11 +6035,6 @@ p-finally@^1.0.0: resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE= - p-is-promise@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" @@ -6015,35 +6042,35 @@ p-is-promise@^3.0.0: p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559720897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1606288475631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= dependencies: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559720897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1606288475631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= dependencies: p-limit "^2.2.0" @@ -6060,8 +6087,8 @@ p-map@^2.0.0: p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + resolved "https://registry.npm.taobao.org/p-map/download/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs= dependencies: aggregate-error "^3.0.0" @@ -6105,7 +6132,7 @@ package-json@^4.0.0: pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: version "9.5.12" - resolved "https://registry.npm.taobao.org/pacote/download/pacote-9.5.12.tgz?cache=0&sync_timestamp=1595370589537&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpacote%2Fdownload%2Fpacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + resolved "https://registry.npm.taobao.org/pacote/download/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" integrity sha1-HhHdeo1za8w2s3WpgE1BuwN3v2Y= dependencies: bluebird "^3.5.3" @@ -6502,9 +6529,9 @@ qs@~6.5.2: integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= query-string@^6.8.2: - version "6.13.5" - resolved "https://registry.npm.taobao.org/query-string/download/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8" - integrity sha1-meleL7cCHbkKbzc/mQwMgUs4Etg= + version "6.13.8" + resolved "https://registry.npm.taobao.org/query-string/download/query-string-6.13.8.tgz?cache=0&sync_timestamp=1609312670005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquery-string%2Fdownload%2Fquery-string-6.13.8.tgz#8cf231759c85484da3cf05a851810d8e825c1159" + integrity sha1-jPIxdZyFSE2jzwWoUYENjoJcEVk= dependencies: decode-uri-component "^0.2.0" split-on-first "^1.0.0" @@ -6558,7 +6585,7 @@ read-installed@~4.0.3: "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: version "2.1.2" - resolved "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.2.tgz?cache=0&sync_timestamp=1597961547307&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-package-json%2Fdownload%2Fread-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + resolved "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.2.tgz?cache=0&sync_timestamp=1602551832433&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-package-json%2Fdownload%2Fread-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" integrity sha1-aZKytmxxdyWf646qxzw6zSi5Iio= dependencies: glob "^7.1.1" @@ -6568,7 +6595,7 @@ read-installed@~4.0.3: read-package-tree@^5.3.1: version "5.3.1" - resolved "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz?cache=0&sync_timestamp=1581759331863&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-package-tree%2Fdownload%2Fread-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + resolved "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" integrity sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY= dependencies: read-package-json "^2.0.0" @@ -6648,7 +6675,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= @@ -6719,16 +6746,16 @@ regexpp@^3.0.0, regexpp@^3.1.0: registry-auth-token@^3.0.1: version "3.4.0" - resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.4.0.tgz?cache=0&sync_timestamp=1594638434951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.4.0.tgz?cache=0&sync_timestamp=1605012436264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" integrity sha1-10RoFUM/XV7WQxzV3KIQSPZrOX4= dependencies: rc "^1.1.6" safe-buffer "^5.0.1" registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.2.0.tgz?cache=0&sync_timestamp=1594638434951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha1-HTff/acrvs0PWB5HFVQCE6Zet9o= + version "4.2.1" + resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.2.1.tgz?cache=0&sync_timestamp=1605012436264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha1-bXtABkQZGJcszV/tzUHcMix5slA= dependencies: rc "^1.2.8" @@ -6858,13 +6885,21 @@ resolve@1.1.7: resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: +resolve@1.x, resolve@^1.3.2: version "1.17.0" resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha1-sllBtUloIxzC0bt2p5y38sC/hEQ= dependencies: path-parse "^1.0.6" +resolve@^1.10.0, resolve@^1.17.0: + version "1.19.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw= + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6902,15 +6937,15 @@ rimraf@2.6.3: rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" - resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1589682814592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= dependencies: glob "^7.1.3" rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= dependencies: glob "^7.1.3" @@ -6930,9 +6965,9 @@ run-node@^1.0.0: integrity sha1-RrULlGoqotSUeuHYhumFb9nKvl4= run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk= + version "1.1.10" + resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.10.tgz?cache=0&sync_timestamp=1603768406762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha1-YKUbKug2Y2yBN33xbLEHNRvNE+8= run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -6990,10 +7025,10 @@ sax@^1.2.4: resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= -semantic-release@^17.2.3: - version "17.2.3" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-17.2.3.tgz#11f10b851d4e75b1015b17515c433049b3df994c" - integrity sha512-MY1MlowGQrkOR7+leOD8ICkVOC6i1szbwDODdbJ0UdshtMx8Ms0bhpRQmEEliqYKEb5PLv/dqs6zKKuHT7UxTg== +semantic-release@^17.3.1: + version "17.3.1" + resolved "https://registry.npm.taobao.org/semantic-release/download/semantic-release-17.3.1.tgz#8904ef1ca8e704394de0e204b284f6c252284da4" + integrity sha1-iQTvHKjnBDlN4OIEsoT2wlIoTaQ= dependencies: "@semantic-release/commit-analyzer" "^8.0.0" "@semantic-release/error" "^2.2.0" @@ -7006,7 +7041,7 @@ semantic-release@^17.2.3: env-ci "^5.0.0" execa "^4.0.0" figures "^3.0.0" - find-versions "^3.0.0" + find-versions "^4.0.0" get-stream "^5.0.0" git-log-parser "^1.2.0" hook-std "^2.0.0" @@ -7038,15 +7073,15 @@ semver-diff@^2.0.0: semver-diff@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha1-Bfd85Z8yXgDicGr9Z7tQbdscoys= dependencies: semver "^6.3.0" -semver-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" - integrity sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg= +semver-regex@^3.1.2: + version "3.1.2" + resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" + integrity sha1-NLTA02Hu8mLgcZnb7zFtDyqxGAc= "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" @@ -7058,7 +7093,14 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= -semver@^7.1.2, semver@^7.2.1, semver@^7.3.2: +semver@^7.1.2, semver@^7.3.2: + version "7.3.4" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc= + dependencies: + lru-cache "^6.0.0" + +semver@^7.2.1: version "7.3.2" resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg= @@ -7087,14 +7129,14 @@ sha@^3.0.0: shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz?cache=0&sync_timestamp=1567781622888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz?cache=0&sync_timestamp=1567781622888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-command%2Fdownload%2Fshebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= dependencies: shebang-regex "^3.0.0" @@ -7119,7 +7161,7 @@ shellwords@^0.1.1: resolved "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha1-1rkYHBpI05cyTISHHvvPxz/AZUs= -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw= @@ -7219,7 +7261,7 @@ socks-proxy-agent@^4.0.0: socks@~2.3.2: version "2.3.3" - resolved "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz?cache=0&sync_timestamp=1599605598402&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + resolved "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz?cache=0&sync_timestamp=1607055673562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" integrity sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM= dependencies: ip "1.1.5" @@ -7299,9 +7341,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.6" - resolved "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.6.tgz?cache=0&sync_timestamp=1600286627478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" - integrity sha1-yAdXODwoq/cpZ0SZjLwQaui4VM4= + version "3.0.7" + resolved "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.7.tgz?cache=0&sync_timestamp=1606613263696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha1-6cGKQQ5e1+EkQqVJ+9ivp2cDjWU= split-on-first@^1.0.0: version "1.1.0" @@ -7477,20 +7519,20 @@ string.prototype.padend@^3.0.0: es-abstract "^1.17.0-next.1" string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz?cache=0&sync_timestamp=1586465233837&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM= + version "1.0.3" + resolved "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha1-oivVPMpcfPRNfJ1ccyEYhz1s0Ys= dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz?cache=0&sync_timestamp=1586465234129&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ= + version "1.0.3" + resolved "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.3.tgz?cache=0&sync_timestamp=1606008005667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha1-m0y1kOEjuzZWRAHVmCQpjeUP1ao= dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.5" string_decoder@^1.1.1: version "1.3.0" @@ -7592,7 +7634,7 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= supports-color@^2.0.0: @@ -7602,7 +7644,7 @@ supports-color@^2.0.0: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1608035619713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= dependencies: has-flag "^3.0.0" @@ -7616,15 +7658,15 @@ supports-color@^6.1.0: supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1608035619713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= dependencies: has-flag "^4.0.0" supports-hyperlinks@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha1-9mPfJSr183xdSbvX7u+p4Lnlnkc= dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -7669,13 +7711,13 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: temp-dir@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + resolved "https://registry.npm.taobao.org/temp-dir/download/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha1-vekrBb3+sVFugEycAK1FF38xMh4= tempy@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.0.tgz#4f192b3ee3328a2684d0e3fc5c491425395aab65" - integrity sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w== + resolved "https://registry.npm.taobao.org/tempy/download/tempy-1.0.0.tgz#4f192b3ee3328a2684d0e3fc5c491425395aab65" + integrity sha1-TxkrPuMyiiaE0OP8XEkUJTlaq2U= dependencies: del "^6.0.0" is-stream "^2.0.0" @@ -7702,7 +7744,7 @@ test-exclude@^5.2.3: text-extensions@^1.0.0: version "1.9.0" - resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz?cache=0&sync_timestamp=1581859840988&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftext-extensions%2Fdownload%2Ftext-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY= text-table@^0.2.0, text-table@~0.2.0: @@ -7723,13 +7765,12 @@ through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.0: - version "3.0.2" - resolved "https://registry.npm.taobao.org/through2/download/through2-3.0.2.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha1-mfiJMc/HYex2eLQdXXM2tbage/Q= +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npm.taobao.org/through2/download/through2-4.0.2.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha1-p846wqeosLlmyA58SfBITDsjl2Q= dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" + readable-stream "3" through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" @@ -7893,7 +7934,7 @@ tunnel-agent@^0.6.0: tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364183265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@^0.4.0, type-check@~0.4.0: @@ -7912,27 +7953,27 @@ type-check@~0.3.2: type-fest@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.13.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha1-AXLLW86AsL1ULqNI21DH4hg02TQ= + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E= type-fest@^0.16.0: version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.16.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha1-MkC4kaeLDerpENvrhlU+VSoUiGA= + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.18.1.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha1-20vBUaSiz07r+a3V23VQjbbMhB8= type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1601425309553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= typedarray@^0.0.6: @@ -7946,9 +7987,9 @@ typescript@^3.7.2: integrity sha1-mNYApevcOPQMsndSLxLcgA6eJfo= uglify-js@^3.1.4: - version "3.11.1" - resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.11.1.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.11.1.tgz#32d274fea8aac333293044afd7f81409d5040d38" - integrity sha1-MtJ0/qiqwzMpMESv1/gUCdUEDTg= + version "3.12.4" + resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.12.4.tgz?cache=0&sync_timestamp=1609477956924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.12.4.tgz#93de48bb76bb3ec0fc36563f871ba46e2ee5c7ee" + integrity sha1-k95Iu3a7PsD8NlY/hxukbi7lx+4= uid-number@0.0.6: version "0.0.6" @@ -7993,8 +8034,8 @@ unique-string@^1.0.0: unique-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha1-OcZFH4GvsnSd4rIz4/fF6IQ72J0= dependencies: crypto-random-string "^2.0.0" @@ -8010,13 +8051,13 @@ universalify@^0.1.0: universalify@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + resolved "https://registry.npm.taobao.org/universalify/download/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha1-thodoXPoQ1sv48Z9Kbmt+FlL0W0= universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + resolved "https://registry.npm.taobao.org/universalify/download/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= unpipe@~1.0.0: version "1.0.0" @@ -8038,7 +8079,7 @@ unzip-response@^2.0.1: update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" - resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz?cache=0&sync_timestamp=1601377450994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz?cache=0&sync_timestamp=1604277119140&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= dependencies: boxen "^1.2.1" @@ -8110,7 +8151,7 @@ util.promisify@^1.0.0: uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" - resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1601826530476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4= v8-compile-cache@^2.0.3: @@ -8335,14 +8376,14 @@ xtend@~4.0.1: integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz?cache=0&sync_timestamp=1601576779692&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + version "3.2.2" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.2.tgz?cache=0&sync_timestamp=1609798970194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha1-hckBvWRwznH8S7cjrSCbcPfyhpY= y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz?cache=0&sync_timestamp=1601576779692&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms= + version "4.0.1" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.1.tgz?cache=0&sync_timestamp=1609798970194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha1-jbK4PDHF11CZu4kLI/MJSJHiR9Q= yallist@^2.1.2: version "2.1.2" @@ -8381,23 +8422,28 @@ yargs-parser@^13.1.2: yargs-parser@^15.0.1: version "15.0.1" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-15.0.1.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" integrity sha1-VHhq9AuCDcsvuAJbEbTWWddjI7M= dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.2, yargs-parser@^18.1.3: +yargs-parser@^18.1.2: version "18.1.3" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A= dependencies: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.3: + version "20.2.4" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ= + yargs-parser@^7.0.0: version "7.0.0" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-7.0.0.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= dependencies: camelcase "^4.1.0" @@ -8420,7 +8466,7 @@ yargs@^13.3.0: yargs@^14.2.3: version "14.2.3" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-14.2.3.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-14.2.3.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" integrity sha1-Ghw+3O0a+yov6jNgS8bR2NaIpBQ= dependencies: cliui "^5.0.0" @@ -8437,7 +8483,7 @@ yargs@^14.2.3: yargs@^15.0.1: version "15.4.1" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg= dependencies: cliui "^6.0.0" @@ -8454,7 +8500,7 @@ yargs@^15.0.1: yargs@^8.0.2: version "8.0.2" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= dependencies: camelcase "^4.1.0" From 0485185686941f7cee0315236eb750af48ed3d6d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 8 Jan 2021 14:29:35 +0000 Subject: [PATCH 408/497] chore(release): 5.2.3 [skip ci] ## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) ### Bug Fixes * downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32233e7b..5270d525 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) + + +### Bug Fixes + +* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) + ## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2020-12-19) From 95de29650251af781d8638011dcc5cabeef2784c Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 8 Jan 2021 23:01:27 +0800 Subject: [PATCH 409/497] fix: update expression-eval Signed-off-by: Zixuan Liu --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 017ea407..a36de59c 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ }, "dependencies": { "await-lock": "^2.0.1", - "expression-eval": "^2.0.0", + "expression-eval": "^4.0.0", "ip": "^1.1.5", "micromatch": "^4.0.2" }, diff --git a/yarn.lock b/yarn.lock index 17ccab42..9db93ff1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2708,10 +2708,10 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -expression-eval@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/expression-eval/download/expression-eval-2.1.0.tgz#422915caa46140a7c5b5f248650dea8bf8236e62" - integrity sha1-QikVyqRhQKfFtfJIZQ3qi/gjbmI= +expression-eval@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/expression-eval/download/expression-eval-4.0.0.tgz#d6a07c93e8b33e635710419d4a595d9208b9cc5e" + integrity sha1-1qB8k+izPmNXEEGdSlldkgi5zF4= dependencies: jsep "^0.3.0" From 713ab1e476ee4bf8a3369c82df91ac713e63090b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 8 Jan 2021 15:16:18 +0000 Subject: [PATCH 410/497] chore(release): 5.2.3 [skip ci] ## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) ### Bug Fixes * downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) * update expression-eval ([95de296](https://github.com/casbin/node-casbin/commit/95de29650251af781d8638011dcc5cabeef2784c)) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5270d525..c21059e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ ## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) +### Bug Fixes + +* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) +* update expression-eval ([95de296](https://github.com/casbin/node-casbin/commit/95de29650251af781d8638011dcc5cabeef2784c)) + +## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) + + ### Bug Fixes * downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) From ff41f0a7c6eebbfafe985a929eba9e70f2c4b162 Mon Sep 17 00:00:00 2001 From: Xiaotian Lu Date: Tue, 26 Jan 2021 20:54:03 +0900 Subject: [PATCH 411/497] feat: enforceSync Signed-off-by: Xiaotian Lu --- src/coreEnforcer.ts | 23 +++++++++++++++-------- src/syncedEnforcer.ts | 5 ++--- src/util/util.ts | 31 +++++++++++++++++++++++++++++++ test/enforcer.test.ts | 19 +++++++++++++++++++ 4 files changed, 67 insertions(+), 11 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 0141abb5..0becc013 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -18,7 +18,7 @@ import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; import { Adapter, FilteredAdapter, Watcher, BatchAdapter } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; -import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval } from './util'; +import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval, generatorRunSync, generatorRunAsync } from './util'; import { getLogger, logPrint } from './log'; type Matcher = ((context: any) => Promise) | ((context: any) => any); @@ -274,7 +274,7 @@ export class CoreEnforcer { await this.model.buildRoleLinks(this.rm); } - private async privateEnforce(asyncCompile = true, ...rvals: any[]): Promise { + private *privateEnforce(asyncCompile = true, ...rvals: any[]): Generator> { if (!this.enabled) { return true; } @@ -347,7 +347,7 @@ export class CoreEnforcer { } const context = { ...parameters, ...functions }; - const result = asyncCompile ? await expression(context) : expression(context); + const result = asyncCompile ? yield expression(context) : expression(context); let eftRes: Effect; switch (typeof result) { @@ -395,7 +395,7 @@ export class CoreEnforcer { expression = this.getExpression(asyncCompile, expString); const context = { ...parameters, ...functions }; - const result = asyncCompile ? await expression(context) : expression(context); + const result = asyncCompile ? yield expression(context) : expression(context); if (result) { effectStream.pushEffect(Effect.Allow); @@ -427,15 +427,22 @@ export class CoreEnforcer { /** * If the matchers does not contain an asynchronous method, call it faster. * - * enforceWithSyncCompile decides whether a "subject" can access a "object" with + * enforceSync decides whether a "subject" can access a "object" with * the operation "action", input parameters are usually: (sub, obj, act). * * @param rvals the request needs to be mediated, usually an array * of strings, can be class instances if ABAC is used. * @return whether to allow the request. */ - public async enforceWithSyncCompile(...rvals: any[]): Promise { - return this.privateEnforce(false, ...rvals); + public enforceSync(...rvals: any[]): boolean { + return generatorRunSync(this.privateEnforce(false, ...rvals)); + } + + /** + * Same as enforceSync. To be removed. + */ + public enforceWithSyncCompile(...rvals: any[]): boolean { + return this.enforceSync(...rvals); } /** @@ -447,6 +454,6 @@ export class CoreEnforcer { * @return whether to allow the request. */ public async enforce(...rvals: any[]): Promise { - return this.privateEnforce(true, ...rvals); + return generatorRunAsync(this.privateEnforce(true, ...rvals)); } } diff --git a/src/syncedEnforcer.ts b/src/syncedEnforcer.ts index b3e314af..37e5a6b0 100644 --- a/src/syncedEnforcer.ts +++ b/src/syncedEnforcer.ts @@ -75,9 +75,8 @@ export class SyncedEnforcer extends Enforcer { * of strings, can be class instances if ABAC is used. * @return whether to allow the request. */ - public async enforceWithSyncCompile(...rvals: any[]): Promise { - await this.lock.acquireAsync(); - return super.enforceWithSyncCompile(...rvals).finally(() => this.lock.release()); + public enforceWithSyncCompile(...rvals: any[]): boolean { + return super.enforceWithSyncCompile(...rvals); } /** diff --git a/src/util/util.ts b/src/util/util.ts index 0eda1ac9..42c7380e 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -130,6 +130,35 @@ function getEvalValue(s: string): string[] { return rules; } +// generatorRunSync handle generator function in Sync model and return value which is not Promise +function generatorRunSync(iterator: Generator): any { + let { value, done } = iterator.next(); + while (true) { + if (value instanceof Promise) { + throw new Error('cannot handle Promise in generatorRunSync, Please use generatorRunAsync'); + } + if (!done) { + const temp = value; + ({ value, done } = iterator.next(temp)); + } else { + return value; + } + } +} + +// generatorRunAsync handle generator function in Async model and return Promise +async function generatorRunAsync(iterator: Generator): Promise { + let { value, done } = iterator.next(); + while (true) { + if (!done) { + const temp = await value; + ({ value, done } = iterator.next(temp)); + } else { + return value; + } + } +} + export { escapeAssertion, removeComments, @@ -144,4 +173,6 @@ export { hasEval, replaceEval, getEvalValue, + generatorRunSync, + generatorRunAsync, }; diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 891b071a..b2bdfb0e 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -20,6 +20,10 @@ async function testEnforce(e: Enforcer, sub: any, obj: string, act: string, res: await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } +function testEnforceSync(e: Enforcer, sub: any, obj: string, act: string, res: boolean): void { + expect(e.enforceSync(sub, obj, act)).toBe(res); +} + async function testGetPolicy(e: Enforcer, res: string[][]): Promise { const myRes = await e.getPolicy(); console.log('Policy: ', myRes); @@ -566,3 +570,18 @@ test('test ABAC Scaling', async () => { await testEnforce(e, sub3, '/data1', 'write', false); await testEnforce(e, sub3, '/data2', 'write', false); }); + +test('TestEnforceSync', async () => { + const m = newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); + + const e = await newEnforcer(m); + + await e.addPermissionForUser('alice', 'data1', 'invalid'); + + testEnforceSync(e, 'alice', 'data1', 'read', false); +}); From 05aa048d2f6ea451a9ae14dda3689f567389a38c Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Thu, 28 Jan 2021 18:06:56 +0800 Subject: [PATCH 412/497] docs: switch CI to GitHub Actions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4b7c70d..51f3bd80 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![NPM download][download-image]][download-url] [![install size](https://packagephobia.now.sh/badge?p=casbin)](https://packagephobia.now.sh/result?p=casbin) [![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) -[![Build Status](https://travis-ci.org/casbin/node-casbin.svg?branch=master)](https://travis-ci.org/casbin/node-casbin) +[![GitHub Actions](https://github.com/casbin/node-casbin/workflows/main/badge.svg)](https://github.com/casbin/node-casbin/actions) [![Coverage Status](https://coveralls.io/repos/github/casbin/node-casbin/badge.svg?branch=master)](https://coveralls.io/github/casbin/node-casbin?branch=master) [![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) From ea64e35a48482e820f60ed00d87ae88d3a29338e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 28 Jan 2021 10:19:12 +0000 Subject: [PATCH 413/497] chore(release): 5.3.0 [skip ci] # [5.3.0](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.3.0) (2021-01-28) ### Bug Fixes * downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) * update expression-eval ([95de296](https://github.com/casbin/node-casbin/commit/95de29650251af781d8638011dcc5cabeef2784c)) ### Features * enforceSync ([ff41f0a](https://github.com/casbin/node-casbin/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) --- CHANGELOG.md | 13 +++++++++++++ package.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c21059e5..c4a73faf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# [5.3.0](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.3.0) (2021-01-28) + + +### Bug Fixes + +* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) +* update expression-eval ([95de296](https://github.com/casbin/node-casbin/commit/95de29650251af781d8638011dcc5cabeef2784c)) + + +### Features + +* enforceSync ([ff41f0a](https://github.com/casbin/node-casbin/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) + ## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) diff --git a/package.json b/package.json index a36de59c..2d31fe8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.2.3", + "version": "5.3.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 8c0b1fd6b59c39350e90c768c54577396f89fefe Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 29 Jan 2021 12:56:23 +0800 Subject: [PATCH 414/497] fix: downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2d31fe8e..22bee57c 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ }, "dependencies": { "await-lock": "^2.0.1", - "expression-eval": "^4.0.0", + "expression-eval": "^2.0.0", "ip": "^1.1.5", "micromatch": "^4.0.2" }, diff --git a/yarn.lock b/yarn.lock index 9db93ff1..17ccab42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2708,10 +2708,10 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -expression-eval@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/expression-eval/download/expression-eval-4.0.0.tgz#d6a07c93e8b33e635710419d4a595d9208b9cc5e" - integrity sha1-1qB8k+izPmNXEEGdSlldkgi5zF4= +expression-eval@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/expression-eval/download/expression-eval-2.1.0.tgz#422915caa46140a7c5b5f248650dea8bf8236e62" + integrity sha1-QikVyqRhQKfFtfJIZQ3qi/gjbmI= dependencies: jsep "^0.3.0" From 352cdec7e3390f789b5ed97df67421b8ca8d4184 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 29 Jan 2021 05:06:30 +0000 Subject: [PATCH 415/497] chore(release): 5.3.1 [skip ci] ## [5.3.1](https://github.com/casbin/node-casbin/compare/v5.3.0...v5.3.1) (2021-01-29) ### Bug Fixes * downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/node-casbin/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4a73faf..a8167324 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.3.1](https://github.com/casbin/node-casbin/compare/v5.3.0...v5.3.1) (2021-01-29) + + +### Bug Fixes + +* downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/node-casbin/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) + # [5.3.0](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.3.0) (2021-01-28) diff --git a/package.json b/package.json index 22bee57c..4cdbd0d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.3.0", + "version": "5.3.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From da608aea8f40945f072c8ee2cdb1db031cd65ef9 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sat, 6 Feb 2021 22:13:19 +0800 Subject: [PATCH 416/497] refactor: rename the built-in BatchFileAdapter to FileAdapter (#236) * refactor: refactor BatchFileAdapter Rename the built-in BatchFileAdapter Signed-off-by: Zxilly * feat: add BatchFileAdapter add BatchFileAdapter to keep backward compatibility, and add JSDoc comment @deprecated Signed-off-by: Zxilly * fix: format comment Signed-off-by: Zxilly --- src/persist/batchFileAdapter.ts | 17 +++-------------- src/persist/fileAdapter.ts | 23 +++++++++++++++++++++++ src/persist/index.ts | 1 - test/managementAPI.test.ts | 18 +++++++++--------- 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/persist/batchFileAdapter.ts b/src/persist/batchFileAdapter.ts index 8a8d0fda..d764f188 100644 --- a/src/persist/batchFileAdapter.ts +++ b/src/persist/batchFileAdapter.ts @@ -2,8 +2,9 @@ import { FileAdapter } from './fileAdapter'; import { BatchAdapter } from './batchAdapter'; /** - * FileAdapter is the file adapter for Casbin. - * It can load policy from file or save policy to file. + * BatchFileAdapter is the file adapter for Casbin. + * It can add policies and remove policies. + * @deprecated The class should not be used, you should use FileAdapter. */ export class BatchFileAdapter extends FileAdapter implements BatchAdapter { /** @@ -13,16 +14,4 @@ export class BatchFileAdapter extends FileAdapter implements BatchAdapter { constructor(filePath: string) { super(filePath); } - - // addPolicies adds policy rules to the storage. - // This is part of the Auto-Save feature. - public async addPolicies(sec: string, ptype: string, rules: string[][]): Promise { - throw new Error('not implemented'); - } - - // removePolicies removes policy rules from the storage. - // This is part of the Auto-Save feature. - public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { - throw new Error('not implemented'); - } } diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 11c88ca5..64dc3457 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -86,6 +86,21 @@ export class FileAdapter implements Adapter { public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { throw new Error('not implemented'); } + /** + * addPolicies adds policy rules to the storage. + This is part of the Auto-Save feature. + */ + public async addPolicies(sec: string, ptype: string, rules: string[][]): Promise { + throw new Error('not implemented'); + } + + /** + * UpdatePolicy updates a policy rule from storage. + * This is part of the Auto-Save feature. + */ + updatePolicy(sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise { + throw new Error('not implemented'); + } /** * removePolicy removes a policy rule from the storage. @@ -94,6 +109,14 @@ export class FileAdapter implements Adapter { throw new Error('not implemented'); } + /** + * removePolicies removes policy rules from the storage. + * This is part of the Auto-Save feature. + */ + public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { + throw new Error('not implemented'); + } + /** * removeFilteredPolicy removes policy rules that match the filter from the storage. */ diff --git a/src/persist/index.ts b/src/persist/index.ts index 03b19060..201462a3 100644 --- a/src/persist/index.ts +++ b/src/persist/index.ts @@ -6,4 +6,3 @@ export * from './watcher'; export * from './filteredAdapter'; export * from './defaultFilteredAdapter'; export * from './batchAdapter'; -export * from './batchFileAdapter'; diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 5cdfbb96..755acc37 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -13,7 +13,7 @@ // limitations under the License. import { newEnforcer, Enforcer, Util } from '../src'; -import { BatchFileAdapter } from '../src/persist'; +import { FileAdapter } from '../src'; let e = {} as Enforcer; @@ -147,7 +147,7 @@ test('addPolicy', async () => { }); test('addPolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const rules = [ ['jack', 'data4', 'read'], @@ -170,7 +170,7 @@ test('addNamedPolicy', async () => { }); test('addNamedPolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const rules = [ ['jack', 'data4', 'read'], @@ -193,7 +193,7 @@ test('removePolicy', async () => { }); test('removePolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const rules = [ ['jack', 'data4', 'read'], @@ -225,7 +225,7 @@ test('removeNamedPolicy', async () => { }); test('removeNamedPolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const rules = [ ['jack', 'data4', 'read'], @@ -265,7 +265,7 @@ test('addGroupingPolicy', async () => { }); test('addGroupingPolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], @@ -281,7 +281,7 @@ test('addNamedGroupingPolicy', async () => { }); test('addNamedGroupingPolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], @@ -297,7 +297,7 @@ test('removeGroupingPolicy', async () => { }); test('removeGroupingPolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], @@ -320,7 +320,7 @@ test('removeFilteredNamedGroupingPolicy', async () => { }); test('removeNamedGroupingPolicies', async () => { - const a = new BatchFileAdapter('examples/rbac_policy.csv'); + const a = new FileAdapter('examples/rbac_policy.csv'); e.setAdapter(a); const groupingRules = [ ['ham', 'data4_admin'], From a3218f1a5d134838c0fb90c8ad1c8751e26c6332 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 7 Feb 2021 00:10:30 +0800 Subject: [PATCH 417/497] feat: add updatePolicy() (#234) * feat: add updatePolicy() Signed-off-by: Zxilly * feat: add unittest for updatePolicy() Signed-off-by: Zxilly * feat: add updateForUpdatePolicy() Signed-off-by: Zxilly * feat: add updatePolicy() Signed-off-by: Zxilly * refactor: rename interface Signed-off-by: Zxilly * docs: fix comment Signed-off-by: Zxilly * fix: fix adapter error Signed-off-by: Zxilly * feat: add updatableFileAdapter Signed-off-by: Zxilly * fix: remove incorrect claim and fix comment Signed-off-by: Zxilly * fix: fix comment Signed-off-by: Zxilly * perf: refactor updatePolicy Signed-off-by: Zxilly * fix: fix index Signed-off-by: Zxilly * style: prevent conflict Signed-off-by: Zxilly * fix: remove UpdatableFileAdapter Signed-off-by: Zxilly * fix: fix unittest() In fact,this makes unittest cannot pass.The fix will refer to issue #235 Signed-off-by: Zxilly --- src/coreEnforcer.ts | 4 ++-- src/internalEnforcer.ts | 40 ++++++++++++++++++++++++++++++++- src/managementEnforcer.ts | 27 ++++++++++++++++++++++ src/model/model.ts | 17 ++++++++++++++ src/persist/index.ts | 2 ++ src/persist/updatableAdapter.ts | 22 ++++++++++++++++++ test/managementAPI.test.ts | 22 ++++++++++++++++++ 7 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 src/persist/updatableAdapter.ts diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 0becc013..9df227e0 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -16,7 +16,7 @@ import { compile, compileAsync } from 'expression-eval'; import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; -import { Adapter, FilteredAdapter, Watcher, BatchAdapter } from './persist'; +import { Adapter, FilteredAdapter, Watcher, BatchAdapter, UpdatableAdapter } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval, generatorRunSync, generatorRunAsync } from './util'; import { getLogger, logPrint } from './log'; @@ -33,7 +33,7 @@ export class CoreEnforcer { protected eft: Effector = new DefaultEffector(); private matcherMap: Map = new Map(); - protected adapter: FilteredAdapter | Adapter | BatchAdapter; + protected adapter: UpdatableAdapter | FilteredAdapter | Adapter | BatchAdapter; protected watcher: Watcher | null = null; protected rm: RoleManager = new DefaultRoleManager(10); diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 6e5b2132..854018ee 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -13,7 +13,8 @@ // limitations under the License. import { CoreEnforcer } from './coreEnforcer'; -import { BatchAdapter } from './persist/batchAdapter'; +import { BatchAdapter } from './persist'; +import { UpdatableAdapter } from './persist'; import { PolicyOp } from './model'; /** @@ -85,6 +86,43 @@ export class InternalEnforcer extends CoreEnforcer { return ok; } + /** + * updatePolicyInternal updates a rule from the current policy. + */ + public async updatePolicyInternal(sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise { + if (!this.model.hasPolicy(sec, ptype, oldRule)) { + return false; + } + + if (this.autoSave) { + if ('updatePolicy' in this.adapter) { + try { + await this.adapter.updatePolicy(sec, ptype, oldRule, newRule); + } catch (e) { + if (e.message !== 'not implemented') { + throw e; + } + } + } else { + throw new Error('cannot to update policy, the adapter does not implement the UpdatableAdapter'); + } + } + + if (this.watcher && this.autoNotifyWatcher) { + // In fact I think it should wait for the respond, but they implement add_policy() like this + // error intentionally ignored + this.watcher.update(); + } + + const ok = this.model.updatePolicy(sec, ptype, oldRule, newRule); + if (sec === 'g' && ok) { + await this.buildIncrementalRoleLinks(PolicyOp.PolicyRemove, ptype, [oldRule]); + await this.buildIncrementalRoleLinks(PolicyOp.PolicyAdd, ptype, [newRule]); + } + + return ok; + } + /** * removePolicyInternal removes a rule from the current policy. */ diff --git a/src/managementEnforcer.ts b/src/managementEnforcer.ts index 53de7390..6054f2a5 100644 --- a/src/managementEnforcer.ts +++ b/src/managementEnforcer.ts @@ -276,6 +276,33 @@ export class ManagementEnforcer extends InternalEnforcer { return this.addPoliciesInternal('p', ptype, rules); } + /** + * updatePolicy updates an authorization rule from the current policy. + * If the rule not exists, the function returns false. + * Otherwise the function returns true by changing it to the new rule. + * + * @return succeeds or not. + * @param oldRule the policy will be remove + * @param newRule the policy will be added + */ + public async updatePolicy(oldRule: string[], newRule: string[]): Promise { + return this.updateNamedPolicy('p', oldRule, newRule); + } + + /** + * updateNamedPolicy updates an authorization rule from the current named policy. + * If the rule not exists, the function returns false. + * Otherwise the function returns true by changing it to the new rule. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param oldRule the policy rule will be remove + * @param newRule the policy rule will be added + * @return succeeds or not. + */ + public async updateNamedPolicy(ptype: string, oldRule: string[], newRule: string[]): Promise { + return this.updatePolicyInternal('p', ptype, oldRule, newRule); + } + /** * removePolicy removes an authorization rule from the current policy. * diff --git a/src/model/model.ts b/src/model/model.ts index f6a20c63..aba82ed1 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -245,6 +245,23 @@ export class Model { return [true, rules]; } + // updatePolicy updates a policy from the model + public updatePolicy(sec: string, ptype: string, oldRule: string[], newRule: string[]): boolean { + if (this.hasPolicy(sec, ptype, oldRule)) { + const ast = this.model.get(sec)?.get(ptype); + if (!ast) { + return false; + } + // const index = ast.policy.indexOf(oldRule); + const index = ast.policy.findIndex((r) => util.arrayEquals(r, oldRule)); + if (index !== -1) { + ast.policy[index] = newRule; + return true; + } + } + return false; + } + // removePolicy removes a policy rule from the model. public removePolicy(sec: string, key: string, rule: string[]): boolean { if (this.hasPolicy(sec, key, rule)) { diff --git a/src/persist/index.ts b/src/persist/index.ts index 201462a3..59d0b4d3 100644 --- a/src/persist/index.ts +++ b/src/persist/index.ts @@ -6,3 +6,5 @@ export * from './watcher'; export * from './filteredAdapter'; export * from './defaultFilteredAdapter'; export * from './batchAdapter'; +export * from './batchFileAdapter'; +export * from './updatableAdapter'; diff --git a/src/persist/updatableAdapter.ts b/src/persist/updatableAdapter.ts new file mode 100644 index 00000000..11b04f16 --- /dev/null +++ b/src/persist/updatableAdapter.ts @@ -0,0 +1,22 @@ +// Copyright 2021 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Adapter } from './adapter'; + +// UpdatableAdapter is the interface for Casbin adapters with update policy functions. +export interface UpdatableAdapter extends Adapter { + // UpdatePolicy updates a policy rule from storage. + // This is part of the Auto-Save feature. + updatePolicy(sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise; +} diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index 755acc37..fde73c65 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -185,6 +185,28 @@ test('addNamedPolicies', async () => { } }); +test('updatePolicy', async () => { + const a = new FileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const p = ['alice', 'data1', 'read']; + const q = ['alice', 'data2', 'read']; + const updated = await e.updatePolicy(p, q); + expect(updated).toBe(true); + expect(await e.hasPolicy(...p)).toBe(false); + expect(await e.hasPolicy(...q)).toBe(true); +}); + +test('updateNamedPolicy', async () => { + const a = new FileAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const p = ['alice', 'data1', 'read']; + const q = ['alice', 'data2', 'read']; + const updated = await e.updateNamedPolicy('p', p, q); + expect(updated).toBe(true); + expect(await e.hasPolicy(...p)).toBe(false); + expect(await e.hasPolicy(...q)).toBe(true); +}); + test('removePolicy', async () => { const p = ['alice', 'data1', 'read']; const removed = await e.removePolicy(...p); From c76edf3737711bc75fe270163f643a39bce0e51d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 6 Feb 2021 16:13:37 +0000 Subject: [PATCH 418/497] chore(release): 5.4.0 [skip ci] # [5.4.0](https://github.com/casbin/node-casbin/compare/v5.3.1...v5.4.0) (2021-02-06) ### Features * add updatePolicy() ([#234](https://github.com/casbin/node-casbin/issues/234)) ([a3218f1](https://github.com/casbin/node-casbin/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/node-casbin/issues/235) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8167324..fbf1a353 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.4.0](https://github.com/casbin/node-casbin/compare/v5.3.1...v5.4.0) (2021-02-06) + + +### Features + +* add updatePolicy() ([#234](https://github.com/casbin/node-casbin/issues/234)) ([a3218f1](https://github.com/casbin/node-casbin/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/node-casbin/issues/235) + ## [5.3.1](https://github.com/casbin/node-casbin/compare/v5.3.0...v5.3.1) (2021-01-29) diff --git a/package.json b/package.json index 4cdbd0d6..7d379a99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.3.1", + "version": "5.4.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 4219893a0d45fc9bc95c4469e9db47037a4a2717 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 7 Feb 2021 21:09:51 +0800 Subject: [PATCH 419/497] chore: remove unnecessary files Signed-off-by: Zixuan Liu --- test/c.json | 117 ---------------------------------------------------- 1 file changed, 117 deletions(-) delete mode 100644 test/c.json diff --git a/test/c.json b/test/c.json deleted file mode 100644 index dbaf165b..00000000 --- a/test/c.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "StreamConfig": {}, - "State": { - "Running": true, - "Paused": false, - "Restarting": false, - "OOMKilled": false, - "RemovalInProgress": false, - "Dead": false, - "Pid": 2315, - "ExitCode": 0, - "Error": "", - "StartedAt": "2020-12-15T08:31:34.77819295Z", - "FinishedAt": "2020-12-15T08:28:47.213660759Z", - "Health": null - }, - "ID": "dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8", - "Created": "2020-12-15T06:47:06.3240563Z", - "Managed": false, - "Path": "/sbin/init", - "Args": [], - "Config": { - "Hostname": "dfb05b22e200", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": false, - "AttachStderr": false, - "Tty": true, - "OpenStdin": true, - "StdinOnce": false, - "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], - "Cmd": ["/sbin/init"], - "Image": "centos:7", - "Volumes": null, - "WorkingDir": "", - "Entrypoint": null, - "OnBuild": null, - "Labels": { - "org.label-schema.build-date": "20201113", - "org.label-schema.license": "GPLv2", - "org.label-schema.name": "CentOS Base Image", - "org.label-schema.schema-version": "1.0", - "org.label-schema.vendor": "CentOS", - "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00", - "org.opencontainers.image.licenses": "GPL-2.0-only", - "org.opencontainers.image.title": "CentOS Base Image", - "org.opencontainers.image.vendor": "CentOS" - } - }, - "Image": "sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf", - "NetworkSettings": { - "Bridge": "", - "SandboxID": "f2bd13904b89f5d8ae5c5b7a8210a3af849233b7c34cc65f22d4f69e8223e200", - "HairpinMode": false, - "LinkLocalIPv6Address": "", - "LinkLocalIPv6PrefixLen": 0, - "Networks": { - "bridge": { - "IPAMConfig": null, - "Links": null, - "Aliases": null, - "NetworkID": "c79a6a5b585f09c38c27b0f55054b41cef4de330e259481997f890ff56b367e8", - "EndpointID": "961a7d7968dfa9fb95dba61e94a62c9b9c520039f56a32e10db36c13e8e38afb", - "Gateway": "172.17.0.1", - "IPAddress": "172.17.0.3", - "IPPrefixLen": 16, - "IPv6Gateway": "", - "GlobalIPv6Address": "", - "GlobalIPv6PrefixLen": 0, - "MacAddress": "02:42:ac:11:00:03", - "DriverOpts": null, - "IPAMOperational": false - } - }, - "PortBindings": { - "3306/tcp": [ - { - "HostIp": "", - "HostPort": "33060" - } - ], - "80/tcp": [ - { - "HostIp": "", - "HostPort": "8081" - } - ] - }, - "Service": null, - "Ports": {}, - "SandboxKey": "/var/run/docker/netns/f2bd13904b89", - "SecondaryIPAddresses": null, - "SecondaryIPv6Addresses": null, - "IsAnonymousEndpoint": false, - "HasSwarmEndpoint": false - }, - "LogPath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8-json.log", - "Name": "/lnut_practice_centos7", - "Driver": "overlay2", - "OS": "linux", - "MountLabel": "", - "ProcessLabel": "", - "RestartCount": 0, - "HasBeenStartedBefore": true, - "HasBeenManuallyStopped": false, - "MountPoints": {}, - "SecretReferences": null, - "ConfigReferences": null, - "AppArmorProfile": "", - "HostnamePath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/hostname", - "HostsPath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/hosts", - "ShmPath": "", - "ResolvConfPath": "/var/lib/docker/containers/dfb05b22e200c46bc3eb8b2682aa47edc7bee28b4001f041a9ce7d61161aa0d8/resolv.conf", - "SeccompProfile": "", - "NoNewPrivileges": false -} From 3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf Mon Sep 17 00:00:00 2001 From: Zxilly Date: Fri, 19 Feb 2021 16:40:43 +0800 Subject: [PATCH 420/497] fix: fix unexpected parser action Signed-off-by: Zxilly --- src/config.ts | 11 +++++------ test/config/config.test.ts | 4 ++++ test/config/testini.ini | 7 ++++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/config.ts b/src/config.ts index cf47d3f1..9c3319bc 100644 --- a/src/config.ts +++ b/src/config.ts @@ -91,7 +91,10 @@ export class Config implements ConfigInterface { } private parseBuffer(buf: Buffer): void { - const lines = buf.toString().split('\n'); + const lines = buf + .toString() + .split('\n') + .filter((v) => v); const linesCount = lines.length; let section = ''; let currentLine = ''; @@ -123,15 +126,11 @@ export class Config implements ConfigInterface { let shouldWrite = false; if (line.includes(Config.DEFAULT_MULTI_LINE_SEPARATOR)) { currentLine += line.substring(0, line.length - 1).trim(); - // when the last line has a "\" string - if (lineNumber + 1 === linesCount) { - shouldWrite = true; - } } else { currentLine += line; shouldWrite = true; } - if (shouldWrite) { + if (shouldWrite || lineNumber === linesCount) { this.write(section, lineNumber, currentLine); currentLine = ''; } diff --git a/test/config/config.test.ts b/test/config/config.test.ts index 72593e48..553d0fe9 100644 --- a/test/config/config.test.ts +++ b/test/config/config.test.ts @@ -23,6 +23,10 @@ describe('multi-line test', () => { expect(config.get('multi5::name')).toEqual('r.sub==p.sub&&r.obj==p.obj'); }); + it('should config.get("multi6::name") to equal r.sub==p.sub&&r.obj==p.obj&&r.tex==p.tex', function () { + expect(config.get('multi6::name')).toEqual('r.sub==p.sub&&r.obj==p.obj&&r.tex==p.tex'); + }); + it('should config.get("mysql::mysql.master.host") to equal 10.0.0.1', function () { expect(config.get('mysql::mysql.master.host')).toEqual('10.0.0.1'); }); diff --git a/test/config/testini.ini b/test/config/testini.ini index 94a478b0..e5ebc959 100644 --- a/test/config/testini.ini +++ b/test/config/testini.ini @@ -43,5 +43,10 @@ name = \ [multi5] name = r.sub==p.sub \ - &&r.obj==p.obj\ + &&r.obj==p.obj \ \ + +[multi6] +name = r.sub==p.sub \ + &&r.obj==p.obj \ + &&r.tex==p.tex \ No newline at end of file From 76e607b4285a865a3c88be8da565241e6e96b956 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 19 Feb 2021 13:28:52 +0000 Subject: [PATCH 421/497] chore(release): 5.4.1 [skip ci] ## [5.4.1](https://github.com/casbin/node-casbin/compare/v5.4.0...v5.4.1) (2021-02-19) ### Bug Fixes * fix unexpected parser action ([3074fa9](https://github.com/casbin/node-casbin/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbf1a353..9b4db244 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.4.1](https://github.com/casbin/node-casbin/compare/v5.4.0...v5.4.1) (2021-02-19) + + +### Bug Fixes + +* fix unexpected parser action ([3074fa9](https://github.com/casbin/node-casbin/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) + # [5.4.0](https://github.com/casbin/node-casbin/compare/v5.3.1...v5.4.0) (2021-02-06) diff --git a/package.json b/package.json index 7d379a99..e6f26314 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.4.0", + "version": "5.4.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 9f12511e5fbfb16646b38ad30e345beee5179c9d Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Wed, 3 Mar 2021 23:18:56 +0800 Subject: [PATCH 422/497] fix: improve load policy line Signed-off-by: Zixuan Liu --- package.json | 1 + src/persist/defaultFilteredAdapter.ts | 4 +- src/persist/fileAdapter.ts | 5 +-- src/persist/helper.ts | 18 ++++++-- src/persist/stringAdapter.ts | 3 +- test/persist/helper.test.ts | 59 +++++++++++++++++++++++++++ yarn.lock | 5 +++ 7 files changed, 84 insertions(+), 11 deletions(-) create mode 100644 test/persist/helper.test.ts diff --git a/package.json b/package.json index e6f26314..77ca5436 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ }, "dependencies": { "await-lock": "^2.0.1", + "csv-parse": "^4.15.3", "expression-eval": "^2.0.0", "ip": "^1.1.5", "micromatch": "^4.0.2" diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 26135e9a..c00bf955 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -41,7 +41,7 @@ export class DefaultFilteredAdapter extends FileAdapter implements FilteredAdapt const bodyBuf = await readFile(this.filePath); const lines = bodyBuf.toString().split('\n'); lines.forEach((n: string, index: number) => { - const line = n.trim(); + const line = n; if (!line || DefaultFilteredAdapter.filterLine(line, filter)) { return; } @@ -88,7 +88,7 @@ export class DefaultFilteredAdapter extends FileAdapter implements FilteredAdapt } let skipLine = false; for (let i = 0; i < filter.length; i++) { - if (filter[i] && filter[i].trim() !== filter[i + 1].trim()) { + if (filter[i] && filter[i] !== filter[i + 1]) { skipLine = true; break; } diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts index 64dc3457..849a59c7 100644 --- a/src/persist/fileAdapter.ts +++ b/src/persist/fileAdapter.ts @@ -1,7 +1,7 @@ import { Adapter } from './adapter'; import { Model } from '../model'; import { Helper } from './helper'; -import { readFile, writeFile, arrayToString } from '../util'; +import { arrayToString, readFile, writeFile } from '../util'; /** * FileAdapter is the file adapter for Casbin. @@ -30,8 +30,7 @@ export class FileAdapter implements Adapter { const bodyBuf = await readFile(this.filePath); const lines = bodyBuf.toString().split('\n'); lines.forEach((n: string, index: number) => { - const line = n.trim(); - if (!line) { + if (!n) { return; } handler(n, model); diff --git a/src/persist/helper.ts b/src/persist/helper.ts index 5bb6f6ed..bc659f8c 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -1,13 +1,23 @@ import { Model } from '../model'; +import * as parse from 'csv-parse/lib/sync'; export class Helper { public static loadPolicyLine(line: string, model: Model): void { - if (!line || line.trim() === '' || line.charAt(0) === '#') { + if (!line || line.trimStart().charAt(0) === '#') { return; } - const tokens = line.split(',').map((n) => n.trim()); - const key = tokens[0]; + const tokens = parse(line, { + delimiter: ',', + skip_empty_lines: true, + trim: true, + }); + + if (!tokens || !tokens[0]) { + return; + } + + const key = tokens[0][0]; const sec = key.substring(0, 1); const item = model.model.get(sec); if (!item) { @@ -18,6 +28,6 @@ export class Helper { if (!policy) { return; } - policy.policy.push(tokens.slice(1)); + policy.policy.push(tokens[0].slice(1)); } } diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 8efe14b6..8cf43a8d 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -28,8 +28,7 @@ export class StringAdapter implements Adapter { private async loadRules(model: Model, handler: (line: string, model: Model) => void): Promise { const rules = this.policy.split('\n'); rules.forEach((n: string, index: number) => { - const line = n.trim(); - if (!line) { + if (!n) { return; } handler(n, model); diff --git a/test/persist/helper.test.ts b/test/persist/helper.test.ts new file mode 100644 index 00000000..aa3217c7 --- /dev/null +++ b/test/persist/helper.test.ts @@ -0,0 +1,59 @@ +// Copyright 2021 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Helper, newModel } from '../../src'; + +test('test Helper.loadPolicyLine', async () => { + const m = newModel(); + m.loadModelFromText(` +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub == p.sub && r.obj == p.obj && r.act == p.act + `); + + const testdata = [ + 'p, admin, /, GET', + '# test comment 1', + ' # test comment 2', + `p, "admin", /, POST`, + `"p", "admin", "/", "PUT"`, + `"p","admin",/, "DELETE"`, + `p, " admin","/ ", "PATCH"`, + ]; + + const expectedPolicy = [ + ['admin', '/', 'GET'], + ['admin', '/', 'POST'], + ['admin', '/', 'PUT'], + ['admin', '/', 'DELETE'], + [' admin', '/ ', 'PATCH'], + ]; + + testdata.forEach((n) => { + Helper.loadPolicyLine(n, m); + }); + + const ast = m.model.get('p')?.get('p'); + expect(ast !== null && ast !== undefined).toBe(true); + expect(ast?.policy?.length === expectedPolicy.length).toBe(true); + expect(ast?.policy).toEqual(expectedPolicy); +}); diff --git a/yarn.lock b/yarn.lock index 17ccab42..01a0459d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2022,6 +2022,11 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" +csv-parse@^4.15.3: + version "4.15.3" + resolved "https://registry.npm.taobao.org/csv-parse/download/csv-parse-4.15.3.tgz#8a62759617a920c328cb31c351b05053b8f92b10" + integrity sha1-imJ1lhepIMMoyzHDUbBQU7j5KxA= + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" From 4661bb331b93690a5882119f1d1ee97401107436 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 4 Mar 2021 08:50:44 +0000 Subject: [PATCH 423/497] chore(release): 5.4.2 [skip ci] ## [5.4.2](https://github.com/casbin/node-casbin/compare/v5.4.1...v5.4.2) (2021-03-04) ### Bug Fixes * improve load policy line ([9f12511](https://github.com/casbin/node-casbin/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b4db244..ff42b02f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.4.2](https://github.com/casbin/node-casbin/compare/v5.4.1...v5.4.2) (2021-03-04) + + +### Bug Fixes + +* improve load policy line ([9f12511](https://github.com/casbin/node-casbin/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) + ## [5.4.1](https://github.com/casbin/node-casbin/compare/v5.4.0...v5.4.1) (2021-02-19) diff --git a/package.json b/package.json index 77ca5436..2321df89 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.4.1", + "version": "5.4.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 36e322891f2963dca0dd7410b7f546f9f6f4a586 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sat, 13 Mar 2021 16:27:01 +0800 Subject: [PATCH 424/497] build: upgrade dependency Signed-off-by: Zxilly --- package.json | 28 +- yarn.lock | 2819 +++++++++++++++++++++++++++++--------------------- 2 files changed, 1676 insertions(+), 1171 deletions(-) diff --git a/package.json b/package.json index 2321df89..33bdeb8d 100644 --- a/package.json +++ b/package.json @@ -24,29 +24,29 @@ "@semantic-release/commit-analyzer": "^8.0.1", "@semantic-release/git": "^9.0.0", "@semantic-release/github": "^7.2.0", - "@semantic-release/npm": "^7.0.9", - "@semantic-release/release-notes-generator": "^9.0.1", + "@semantic-release/npm": "^7.0.10", + "@semantic-release/release-notes-generator": "^9.0.2", "@types/ip": "^0.0.31", - "@types/jest": "^24.0.11", - "@types/lodash": "^4.14.113", + "@types/jest": "^26.0.20", + "@types/lodash": "^4.14.168", "@types/micromatch": "^4.0.1", "@types/node": "^10.5.3", - "@typescript-eslint/eslint-plugin": "^4.4.0", - "@typescript-eslint/parser": "^4.4.0", + "@typescript-eslint/eslint-plugin": "^4.17.0", + "@typescript-eslint/parser": "^4.17.0", "coveralls": "^3.0.2", "cz-conventional-changelog": "^3.2.0", - "eslint": "^7.10.0", + "eslint": "^7.22.0", "eslint-config-prettier": "^6.12.0", - "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-prettier": "^3.3.1", "husky": "^2.3.0", - "jest": "^24.3.1", + "jest": "^26.6.3", "lint-staged": "^8.1.7", "npm-run-all": "^4.1.5", - "prettier": "^2.1.2", - "pretty-quick": "^3.0.2", - "rimraf": "^2.6.2", - "semantic-release": "^17.3.1", - "ts-jest": "^24.0.0", + "prettier": "^2.2.1", + "pretty-quick": "^3.1.0", + "rimraf": "^3.0.2", + "semantic-release": "^17.4.2", + "ts-jest": "^26.5.3", "tslint": "^5.11.0", "typescript": "^3.7.2" }, diff --git a/yarn.lock b/yarn.lock index 01a0459d..d3438644 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": +"@babel/code-frame@7.12.11", "@babel/code-frame@^7.0.0": version "7.12.11" resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz?cache=0&sync_timestamp=1608075239039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" integrity sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8= @@ -16,6 +16,18 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.13.8": + version "7.13.8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" + integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== + "@babel/core@^7.1.0": version "7.11.6" resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.6.tgz?cache=0&sync_timestamp=1599146828594&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" @@ -38,7 +50,29 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.4.0": +"@babel/core@^7.7.5": + version "7.13.10" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" + integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.10" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": version "7.11.6" resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.11.6.tgz?cache=0&sync_timestamp=1599146830039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" integrity sha1-uGiQD4GxY7TUZOokVFxhy6xNxiA= @@ -47,6 +81,25 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.13.10": + version "7.13.10" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" + integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + "@babel/helper-function-name@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" @@ -56,6 +109,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593522827189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -63,6 +125,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-member-expression-to-functions@^7.10.4": version "7.11.0" resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.11.0.tgz?cache=0&sync_timestamp=1596144651395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" @@ -70,6 +139,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-member-expression-to-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" + integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== + dependencies: + "@babel/types" "^7.13.0" + "@babel/helper-module-imports@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" @@ -77,6 +153,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-module-transforms@^7.11.0": version "7.11.0" resolved "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.11.0.tgz?cache=0&sync_timestamp=1596142927697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" @@ -90,6 +173,21 @@ "@babel/types" "^7.11.0" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" + integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + lodash "^4.17.19" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522827576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" @@ -97,11 +195,23 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521148758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha1-L3WoMSadT2d95JmG3/WZJ1M883U= +"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + "@babel/helper-replace-supers@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" @@ -112,6 +222,16 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-replace-supers@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" + integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/helper-simple-access@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" @@ -120,6 +240,13 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-split-export-declaration@^7.11.0": version "7.11.0" resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz?cache=0&sync_timestamp=1596142927868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" @@ -127,11 +254,23 @@ dependencies: "@babel/types" "^7.11.0" -"@babel/helper-validator-identifier@^7.10.4": +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.12.11.tgz?cache=0&sync_timestamp=1608075248751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha1-yaHwIZF9y1zPDU5FPjmQIpgfye0= +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + "@babel/helpers@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" @@ -141,6 +280,15 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593522818552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -150,18 +298,109 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.4.3": +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" integrity sha1-x/9jA99xCA7HpPW4wAPFjxz1EDc= -"@babel/plugin-syntax-object-rest-spread@^7.0.0": +"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": + version "7.13.10" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409" + integrity sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz?cache=0&sync_timestamp=1578952449003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/runtime@^7.0.0": version "7.11.2" resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.2.tgz?cache=0&sync_timestamp=1596637824771&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" @@ -169,7 +408,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.4.0": +"@babel/template@^7.10.4": version "7.10.4" resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha1-MlGZbEIA68cdGo/EBfupQPNrong= @@ -178,7 +417,16 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.4.3": +"@babel/template@^7.12.13", "@babel/template@^7.3.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": version "7.11.5" resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" integrity sha1-vnd7k7UY62127i4eodFD2qEeYcM= @@ -193,7 +441,22 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.4.0": +"@babel/traverse@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0": version "7.11.5" resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" integrity sha1-2d5XfQElLXfGgAzuA57mT691Zi0= @@ -202,6 +465,20 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.3.3": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.npm.taobao.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" @@ -243,10 +520,10 @@ resolved "https://registry.npm.taobao.org/@commitlint/types/download/@commitlint/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe" integrity sha1-cZzwX8wau2UzYQouD13R5h6sFP4= -"@eslint/eslintrc@^0.1.3": - version "0.1.3" - resolved "https://registry.npm.taobao.org/@eslint/eslintrc/download/@eslint/eslintrc-0.1.3.tgz?cache=0&sync_timestamp=1598987645723&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40eslint%2Feslintrc%2Fdownload%2F%40eslint%2Feslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" - integrity sha1-fRorI1hVLMBINMCXm9QnU2LjcIU= +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -255,7 +532,6 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.19" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -268,153 +544,192 @@ update-notifier "^2.2.0" yargs "^8.0.2" -"@jest/console@^24.7.1", "@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/console/download/@jest/console-24.9.0.tgz?cache=0&sync_timestamp=1601981693425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fconsole%2Fdownload%2F%40jest%2Fconsole-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha1-ebG8Bvt0qM+wHL3t+UVYSxuXB/A= +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/core@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/core/download/@jest/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" - integrity sha1-LOzNC5MYH5xIUOdPKprUPTUTacQ= - dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.9.0" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-resolve-dependencies "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - jest-watcher "^24.9.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - realpath-native "^1.1.0" - rimraf "^2.5.4" - slash "^2.0.0" - strip-ansi "^5.0.0" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" -"@jest/environment@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/environment/download/@jest/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" - integrity sha1-IeOvotZcBYbL1svv4gi6+t5Eqxg= - dependencies: - "@jest/fake-timers" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - -"@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/fake-timers/download/@jest/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha1-uj5r8O7NCaY2BJiWQ00wZjZUDJM= - dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - -"@jest/reporters@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/reporters/download/@jest/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" - integrity sha1-hmYO/44rlmHQQqjpigKLjWMaW0M= - dependencies: - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.2.6" - jest-haste-map "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - node-notifier "^5.4.2" - slash "^2.0.0" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" source-map "^0.6.0" - string-length "^2.0.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" -"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/source-map/download/@jest/source-map-24.9.0.tgz?cache=0&sync_timestamp=1601890138928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fsource-map%2Fdownload%2F%40jest%2Fsource-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha1-DiY6lEML5LQdpoPMwea//ioZFxQ= +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" - graceful-fs "^4.1.15" + graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/test-result/download/@jest/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha1-EXluiqnb+I6gJXV7MVJZWtBroMo= +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/test-sequencer/download/@jest/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" - integrity sha1-+PM081tiWk8vNV8v5+YDba0uazE= +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jest/test-result" "^24.9.0" - jest-haste-map "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/transform/download/@jest/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha1-SuJ2iyllU/rasJ6ewRlUPJCxbFY= +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^2.0.0" + slash "^3.0.0" source-map "^0.6.1" - write-file-atomic "2.4.1" + write-file-atomic "^3.0.0" -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.npm.taobao.org/@jest/types/download/@jest/types-24.9.0.tgz?cache=0&sync_timestamp=1601981686839&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Ftypes%2Fdownload%2F%40jest%2Ftypes-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha1-Y8smy3UA0Gnlo4lEGnxqtekJ/Fk= +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" "@nodelib/fs.scandir@2.1.4": version "2.1.4" @@ -611,7 +926,7 @@ p-retry "^4.0.0" url-join "^4.0.0" -"@semantic-release/npm@^7.0.0", "@semantic-release/npm@^7.0.9": +"@semantic-release/npm@^7.0.0": version "7.0.9" resolved "https://registry.npm.taobao.org/@semantic-release/npm/download/@semantic-release/npm-7.0.9.tgz#a49d80d0f96a52cd70f9ce4e78fac5be70f24844" integrity sha1-pJ2A0PlqUs1w+c5OePrFvnDySEQ= @@ -630,7 +945,26 @@ semver "^7.1.2" tempy "^1.0.0" -"@semantic-release/release-notes-generator@^9.0.0", "@semantic-release/release-notes-generator@^9.0.1": +"@semantic-release/npm@^7.0.10": + version "7.0.10" + resolved "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.0.10.tgz#85e5b201e71896ecc3f45d7a496f5485f97df0b8" + integrity sha512-DXFEhgSt5u22imTWbw8wfcVGB90nFJNcjUBtJI3zswJojzZ7yXpY4i2Va5RBRQRTtj00BfG0stbilAtKrKp35g== + dependencies: + "@semantic-release/error" "^2.2.0" + aggregate-error "^3.0.0" + execa "^5.0.0" + fs-extra "^9.0.0" + lodash "^4.17.15" + nerf-dart "^1.0.0" + normalize-url "^5.0.0" + npm "^6.14.9" + rc "^1.2.8" + read-pkg "^5.0.0" + registry-auth-token "^4.0.0" + semver "^7.1.2" + tempy "^1.0.0" + +"@semantic-release/release-notes-generator@^9.0.0": version "9.0.1" resolved "https://registry.npm.taobao.org/@semantic-release/release-notes-generator/download/@semantic-release/release-notes-generator-9.0.1.tgz#732d285d103064f2a64f08a32031551ebb4f918b" integrity sha1-cy0oXRAwZPKmTwijIDFVHrtPkYs= @@ -646,15 +980,45 @@ lodash "^4.17.4" read-pkg-up "^7.0.0" +"@semantic-release/release-notes-generator@^9.0.2": + version "9.0.2" + resolved "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.2.tgz#a00da9f984b6d42d16e037ecd529f58665cde938" + integrity sha512-xGFSidhGqB27uwgWCU6y0gbf4r/no5flOAkJyFFc4+bPf8S+LfAVm7xhhlK5VPXLt2Iu1RBH8F+IgMK2ah5YpA== + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-changelog-writer "^4.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.0.0" + debug "^4.0.0" + get-stream "^5.0.0" + import-from "^3.0.0" + into-stream "^6.0.0" + lodash "^4.17.4" + read-pkg-up "^7.0.0" + +"@sinonjs/commons@^1.7.0": + version "1.8.2" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" + integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.npm.taobao.org/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha1-zLkURTYBeaBOf+av94wA/8Hur4I= -"@types/babel__core@^7.1.0": - version "7.1.10" - resolved "https://registry.npm.taobao.org/@types/babel__core/download/@types/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" - integrity sha1-ylj8GV3Zc0535XxvLfVlYjY2q0A= +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.12" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -684,11 +1048,25 @@ dependencies: "@babel/types" "^7.3.0" +"@types/babel__traverse@^7.0.4": + version "7.11.0" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + dependencies: + "@babel/types" "^7.3.0" + "@types/braces@*": version "3.0.0" resolved "https://registry.npm.taobao.org/@types/braces/download/@types/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" integrity sha1-faHA1E/xx+tmCjbsB46mG6frQss= +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + "@types/ip@^0.0.31": version "0.0.31" resolved "https://registry.npm.taobao.org/@types/ip/download/@types/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" @@ -696,7 +1074,7 @@ dependencies: "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" integrity sha1-S6jdtyAiH0MuRDvV+RF/0iz9R2I= @@ -708,30 +1086,30 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.npm.taobao.org/@types/istanbul-reports/download/@types/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha1-6HXMaJ5HvOVJ7IHz315vbxHPrrI= +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== dependencies: - "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest@^24.0.11": - version "24.9.1" - resolved "https://registry.npm.taobao.org/@types/jest/download/@types/jest-24.9.1.tgz?cache=0&sync_timestamp=1600269796422&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjest%2Fdownload%2F%40types%2Fjest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" - integrity sha1-Arr5Vzx48bmXSl82d4s2aqd71TQ= +"@types/jest@^26.0.20": + version "26.0.20" + resolved "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" + integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== dependencies: - jest-diff "^24.3.0" + jest-diff "^26.0.0" + pretty-format "^26.0.0" "@types/json-schema@^7.0.3": version "7.0.6" resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA= -"@types/lodash@^4.14.113": - version "4.14.161" - resolved "https://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.161.tgz?cache=0&sync_timestamp=1598664997598&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.161.tgz#a21ca0777dabc6e4f44f3d07f37b765f54188b18" - integrity sha1-ohygd32rxuT0Tz0H83t2X1QYixg= +"@types/lodash@^4.14.168": + version "4.14.168" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== "@types/micromatch@^4.0.1": version "4.0.1" @@ -775,96 +1153,101 @@ resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1605055243639&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= +"@types/prettier@^2.0.0": + version "2.2.2" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.2.tgz#e2280c89ddcbeef340099d6968d8c86ba155fdf6" + integrity sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg== + "@types/retry@^0.12.0": version "0.12.0" resolved "https://registry.npm.taobao.org/@types/retry/download/@types/retry-0.12.0.tgz?cache=0&sync_timestamp=1605057731420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fretry%2Fdownload%2F%40types%2Fretry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha1-KzXsz87n04zXKtmSMvvVi/+zyE0= -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.npm.taobao.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz?cache=0&sync_timestamp=1600734823233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fstack-utils%2Fdownload%2F%40types%2Fstack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha1-CoUdO9lkmPolwzq3J47TvWXwbD4= +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz?cache=0&sync_timestamp=1596842545661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha1-yz+fdBhp4gzOMw/765JxWQSDiC0= -"@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-13.0.11.tgz?cache=0&sync_timestamp=1600887198322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha1-3vLwyT5L3yxh1+NImbF+NL4o07E= +"@types/yargs@^15.0.0": + version "15.0.13" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" + integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.4.0": - version "4.4.0" - resolved "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.4.0.tgz#0321684dd2b902c89128405cf0385e9fe8561934" - integrity sha1-AyFoTdK5AsiRKEBc8Dhen+hWGTQ= +"@typescript-eslint/eslint-plugin@^4.17.0": + version "4.17.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.17.0.tgz#6f856eca4e6a52ce9cf127dfd349096ad936aa2d" + integrity sha512-/fKFDcoHg8oNan39IKFOb5WmV7oWhQe1K6CDaAVfJaNWEhmfqlA24g+u1lqU5bMH7zuNasfMId4LaYWC5ijRLw== dependencies: - "@typescript-eslint/experimental-utils" "4.4.0" - "@typescript-eslint/scope-manager" "4.4.0" + "@typescript-eslint/experimental-utils" "4.17.0" + "@typescript-eslint/scope-manager" "4.17.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" + lodash "^4.17.15" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.4.0": - version "4.4.0" - resolved "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.4.0.tgz?cache=0&sync_timestamp=1602005693374&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-4.4.0.tgz#62a05d3f543b8fc5dec4982830618ea4d030e1a9" - integrity sha1-YqBdP1Q7j8XexJgoMGGOpNAw4ak= +"@typescript-eslint/experimental-utils@4.17.0": + version "4.17.0" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.17.0.tgz#762c44aaa1a6a3c05b6d63a8648fb89b89f84c80" + integrity sha512-ZR2NIUbnIBj+LGqCFGQ9yk2EBQrpVVFOh9/Kd0Lm6gLpSAcCuLLe5lUCibKGCqyH9HPwYC0GIJce2O1i8VYmWA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.4.0" - "@typescript-eslint/types" "4.4.0" - "@typescript-eslint/typescript-estree" "4.4.0" + "@typescript-eslint/scope-manager" "4.17.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/typescript-estree" "4.17.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.4.0": - version "4.4.0" - resolved "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-4.4.0.tgz?cache=0&sync_timestamp=1602005696227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-4.4.0.tgz#65974db9a75f23b036f17b37e959b5f99b659ec0" - integrity sha1-ZZdNuadfI7A28Xs36Vm1+ZtlnsA= +"@typescript-eslint/parser@^4.17.0": + version "4.17.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.17.0.tgz#141b647ffc72ebebcbf9b0fe6087f65b706d3215" + integrity sha512-KYdksiZQ0N1t+6qpnl6JeK9ycCFprS9xBAiIrw4gSphqONt8wydBw4BXJi3C11ywZmyHulvMaLjWsxDjUSDwAw== dependencies: - "@typescript-eslint/scope-manager" "4.4.0" - "@typescript-eslint/types" "4.4.0" - "@typescript-eslint/typescript-estree" "4.4.0" + "@typescript-eslint/scope-manager" "4.17.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/typescript-estree" "4.17.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.4.0": - version "4.4.0" - resolved "https://registry.npm.taobao.org/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.4.0.tgz#2f3dd27692a12cc9a046a90ba6a9d8cb7731190a" - integrity sha1-Lz3SdpKhLMmgRqkLpqnYy3cxGQo= +"@typescript-eslint/scope-manager@4.17.0": + version "4.17.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.17.0.tgz#f4edf94eff3b52a863180f7f89581bf963e3d37d" + integrity sha512-OJ+CeTliuW+UZ9qgULrnGpPQ1bhrZNFpfT/Bc0pzNeyZwMik7/ykJ0JHnQ7krHanFN9wcnPK89pwn84cRUmYjw== dependencies: - "@typescript-eslint/types" "4.4.0" - "@typescript-eslint/visitor-keys" "4.4.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/visitor-keys" "4.17.0" -"@typescript-eslint/types@4.4.0": - version "4.4.0" - resolved "https://registry.npm.taobao.org/@typescript-eslint/types/download/@typescript-eslint/types-4.4.0.tgz?cache=0&sync_timestamp=1602005758566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-4.4.0.tgz#63440ef87a54da7399a13bdd4b82060776e9e621" - integrity sha1-Y0QO+HpU2nOZoTvdS4IGB3bp5iE= +"@typescript-eslint/types@4.17.0": + version "4.17.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.17.0.tgz#f57d8fc7f31b348db946498a43050083d25f40ad" + integrity sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g== -"@typescript-eslint/typescript-estree@4.4.0": - version "4.4.0" - resolved "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.4.0.tgz#16a2df7c16710ddd5406b32b86b9c1124b1ca526" - integrity sha1-FqLffBZxDd1UBrMrhrnBEkscpSY= +"@typescript-eslint/typescript-estree@4.17.0": + version "4.17.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz#b835d152804f0972b80dbda92477f9070a72ded1" + integrity sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ== dependencies: - "@typescript-eslint/types" "4.4.0" - "@typescript-eslint/visitor-keys" "4.4.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/visitor-keys" "4.17.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" - lodash "^4.17.15" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.4.0": - version "4.4.0" - resolved "https://registry.npm.taobao.org/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.4.0.tgz#0a9118344082f14c0f051342a74b42dfdb012640" - integrity sha1-CpEYNECC8UwPBRNCp0tC39sBJkA= +"@typescript-eslint/visitor-keys@4.17.0": + version "4.17.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz#9c304cfd20287c14a31d573195a709111849b14d" + integrity sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ== dependencies: - "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/types" "4.17.0" eslint-visitor-keys "^2.0.0" JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: @@ -875,49 +1258,44 @@ JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.0: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" - resolved "https://registry.npm.taobao.org/abab/download/abab-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fabab%2Fdownload%2Fabab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o= + resolved "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= -acorn-globals@^4.1.0: - version "4.3.4" - resolved "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-globals%2Fdownload%2Facorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha1-n6GSat3BHJcwjE5m163Q1Awycuc= +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" + acorn "^7.1.1" + acorn-walk "^7.1.1" -acorn-jsx@^5.2.0: +acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz?cache=0&sync_timestamp=1599499085730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns= -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.2.0.tgz?cache=0&sync_timestamp=1597235853605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha1-Ejy487hMIXHx9/slJhWxx4prGow= - -acorn@^5.5.3: - version "5.7.4" - resolved "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha1-Po2KmUfQWZoXltECJddDL0pKz14= - -acorn@^6.0.1: - version "6.4.2" - resolved "https://registry.npm.taobao.org/acorn/download/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha1-NYZv1xBSjpLeEM8GAWSY5H454eY= +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.4.0: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= +acorn@^8.0.5: + version "8.1.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" + integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== + agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -954,7 +1332,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.5" resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" integrity sha1-GbDouuj0duW6ZmMAOHd1+xoApNo= @@ -974,6 +1352,16 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^7.0.2: + version "7.2.1" + resolved "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz#a5ac226171912447683524fa2f1248fcf8bac83d" + integrity sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -991,7 +1379,7 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&sync_timestamp=1583072748255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= -ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.1" resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&sync_timestamp=1583072748255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE= @@ -1008,7 +1396,7 @@ ansi-regex@^3.0.0: resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.0.0, ansi-regex@^4.1.0: +ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= @@ -1060,6 +1448,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.0.3: + version "3.1.1" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: version "1.2.0" resolved "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1115,11 +1511,6 @@ array-differ@^3.0.0: resolved "https://registry.npm.taobao.org/array-differ/download/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha1-PLs9DzFoEOr8xHYkc0I31q7krms= -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - array-ify@^1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/array-ify/download/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -1179,15 +1570,10 @@ assign-symbols@^1.0.0: resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k= - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== asynckit@^0.4.0: version "0.4.0" @@ -1219,47 +1605,70 @@ aws4@^1.8.0: resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101421225&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk= -babel-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/babel-jest/download/babel-jest-24.9.0.tgz?cache=0&sync_timestamp=1601981648682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-jest%2Fdownload%2Fbabel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" - integrity sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ= +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.9.0" - chalk "^2.4.2" - slash "^2.0.0" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" -babel-plugin-istanbul@^5.1.0: - version "5.2.0" - resolved "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha1-30reg9iXqS3wacTZolzyZxKTyFQ= +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - -babel-plugin-jest-hoist@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-24.9.0.tgz?cache=0&sync_timestamp=1601890138307&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-jest-hoist%2Fdownload%2Fbabel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" - integrity sha1-T4NwketAfgFEfIhDy+xUbQAC11Y= - dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-preset-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-24.9.0.tgz?cache=0&sync_timestamp=1601890121191&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-preset-jest%2Fdownload%2Fbabel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" - integrity sha1-GStSHiIX+x0fZ89z9wwzZlCtPNw= - dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.9.0" +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base@^0.11.1: @@ -1299,13 +1708,6 @@ bin-links@^1.1.2, bin-links@^1.1.8: npm-normalize-package-bin "^1.0.0" write-file-atomic "^2.3.0" -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha1-EDU8npRTNLwFEabZCzj7x8nFBN8= - dependencies: - file-uri-to-path "1.0.0" - bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -1331,8 +1733,8 @@ boxen@^1.2.1: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -1365,12 +1767,16 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY= -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz?cache=0&sync_timestamp=1596458151883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowser-resolve%2Fdownload%2Fbrowser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY= +browserslist@^4.14.5: + version "4.16.3" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== dependencies: - resolve "1.1.7" + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" bs-logger@0.x: version "0.2.6" @@ -1508,6 +1914,16 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-lite@^1.0.30001181: + version "1.0.30001199" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001199.tgz#062afccaad21023e2e647d767bac4274b8b8fd7f" + integrity sha512-ifbK2eChUCFUwGhlEzIoVwzFt1+iriSjyKKFYNfv6hN34483wyWpLLavYQXhnR036LhkdUYaSDpHg1El++VgHQ== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -1533,7 +1949,7 @@ caseless@~0.12.0: resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@4.1.0, chalk@^4.0.0: +chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo= @@ -1569,6 +1985,11 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1596,6 +2017,11 @@ cidr-regex@^2.0.10: dependencies: ip-regex "^2.1.0" +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1682,13 +2108,22 @@ cliui@^5.0.0: cliui@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE= + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -1712,6 +2147,11 @@ code-point-at@^1.0.0: resolved "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -1744,6 +2184,11 @@ color-name@~1.1.4: resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= +colorette@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + colors@^1.1.2: version "1.4.0" resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -1804,7 +2249,7 @@ component-emitter@^1.2.1: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0: @@ -1892,7 +2337,7 @@ conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: through2 "^4.0.0" trim-off-newlines "^1.0.0" -convert-source-map@^1.4.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= @@ -1931,17 +2376,6 @@ cosmiconfig@^5.2.0: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI= - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - cosmiconfig@^7.0.0: version "7.0.0" resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-7.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" @@ -2010,17 +2444,22 @@ crypto-random-string@^2.0.0: resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-2.0.0.tgz?cache=0&sync_timestamp=1599137690451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha1-7yp6lm7BEIM4g2m6oC6+rSKbMNU= -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: version "0.3.8" - resolved "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1573719337707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o= + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^1.0.0: - version "1.4.0" - resolved "https://registry.npm.taobao.org/cssstyle/download/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha1-nTEyginTxWXGHlhrAgQaKPzNzPE= +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: - cssom "0.3.x" + cssom "~0.3.6" csv-parse@^4.15.3: version "4.15.3" @@ -2067,14 +2506,14 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4= +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" date-fns@^1.27.2: version "1.30.1" @@ -2139,6 +2578,11 @@ decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.1: + version "10.2.1" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -2159,6 +2603,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + defaults@^1.0.3: version "1.0.3" resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -2256,6 +2705,11 @@ detect-newline@^2.1.0: resolved "https://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + dezalgo@^1.0.0, dezalgo@~1.0.3: version "1.0.3" resolved "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -2264,10 +2718,10 @@ dezalgo@^1.0.0, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -diff-sequences@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-24.9.0.tgz?cache=0&sync_timestamp=1601890138646&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff-sequences%2Fdownload%2Fdiff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" - integrity sha1-VxXWJE4qpl9Iu6C8ly2wsLEelbU= +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diff@^4.0.1: version "4.0.2" @@ -2288,12 +2742,12 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA= +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== dependencies: - webidl-conversions "^4.0.2" + webidl-conversions "^5.0.0" dot-prop@^4.2.1: version "4.2.1" @@ -2349,11 +2803,21 @@ editor@~1.0.0: resolved "https://registry.npm.taobao.org/editor/download/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= +electron-to-chromium@^1.3.649: + version "1.3.687" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.687.tgz#c336184b7ab70427ffe2ee79eaeaedbc1ad8c374" + integrity sha512-IpzksdQNl3wdgkzf7dnA7/v10w0Utf1dF2L+B4+gKrloBrxCut+au+kky3PYvle3RMdSxZP+UiCZtLbcYRxSNQ== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212229889&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2417,7 +2881,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: +es-abstract@^1.17.0-next.1: version "1.17.7" resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" integrity sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw= @@ -2473,18 +2937,28 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.9.1: - version "1.14.3" - resolved "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -2497,10 +2971,10 @@ eslint-config-prettier@^6.12.0: dependencies: get-stdin "^6.0.0" -eslint-plugin-prettier@^3.1.4: - version "3.1.4" - resolved "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" - integrity sha1-Foq0MVTi6lfbmSos0JfIKBcfdcI= +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -2529,13 +3003,13 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-2.0.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha1-If3I+82ceVzAMh8FY3AglXUVEag= -eslint@^7.10.0: - version "7.10.0" - resolved "https://registry.npm.taobao.org/eslint/download/eslint-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9" - integrity sha1-SU7bPkdQ+3kRM8o3nnhqj2SMcrk= +eslint@^7.22.0: + version "7.22.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz#07ecc61052fec63661a2cab6bd507127c07adc6f" + integrity sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.1.3" + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -2544,14 +3018,14 @@ eslint@^7.10.0: enquirer "^2.3.5" eslint-scope "^5.1.1" eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^7.3.0" - esquery "^1.2.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^12.1.0" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -2559,7 +3033,7 @@ eslint@^7.10.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.19" + lodash "^4.17.21" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -2568,7 +3042,7 @@ eslint@^7.10.0: semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^5.2.3" + table "^6.0.4" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -2581,15 +3055,24 @@ espree@^7.3.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" +espree@^7.3.1: + version "7.3.1" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= -esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc= +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" @@ -2600,7 +3083,7 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= @@ -2701,17 +3184,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/expect/download/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" - integrity sha1-t1FltIFwdPpKFXeU9G/p8boVtso= +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - "@jest/types" "^24.9.0" - ansi-styles "^3.2.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.9.0" + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" expression-eval@^2.0.0: version "2.1.0" @@ -2846,17 +3329,12 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w= +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - flat-cache "^2.0.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90= + flat-cache "^3.0.4" fill-range@^4.0.0: version "4.0.0" @@ -2932,19 +3410,18 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA= +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.1.0" + rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha1-RXWyHivO50NKqb5mL0t7X5wrUTg= +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== flush-write-stream@^1.0.0: version "1.1.1" @@ -3048,16 +3525,13 @@ fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg= - dependencies: - bindings "^1.5.0" - nan "^2.12.1" +fsevents@^2.1.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" @@ -3102,6 +3576,11 @@ gensync@^1.0.0-beta.1: resolved "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk= +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + gentle-fs@^2.3.0, gentle-fs@^2.3.1: version "2.3.1" resolved "https://registry.npm.taobao.org/gentle-fs/download/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" @@ -3124,7 +3603,7 @@ get-caller-file@^1.0.1: resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= @@ -3143,6 +3622,11 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&sync_timestamp=1575993577501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha1-tf3nfyLL4185C04ImSLFC85u9mQ= +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -3271,6 +3755,13 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.6.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz#d77138e53738567bb96a3916ff6f6b487af20ef7" + integrity sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ== + dependencies: + type-fest "^0.20.2" + globby@^11.0.0, globby@^11.0.1: version "11.0.2" resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.2.tgz?cache=0&sync_timestamp=1609936472420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" @@ -3433,19 +3924,26 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg= -hosted-git-info@^3.0.0, hosted-git-info@^3.0.6: +hosted-git-info@^3.0.6: version "3.0.7" resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" integrity sha1-owcnOF6oWs/O6U4KrZ42jHkuA2w= dependencies: lru-cache "^6.0.0" -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg= +hosted-git-info@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.0.tgz#9f06639a90beff66cacae6e77f8387b431d61ddc" + integrity sha512-fqhGdjk4av7mT9fU/B01dUtZ+WZSc/XEXMoLXDVZukiQRXxeHSSz3AqbeWRJHtF8EQYHlAgB1NSAHU0Cm7aqZA== + dependencies: + lru-cache "^6.0.0" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: - whatwg-encoding "^1.0.1" + whatwg-encoding "^1.0.5" html-escaper@^2.0.0: version "2.0.2" @@ -3589,14 +4087,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-fresh@^3.1.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.3.0.tgz?cache=0&sync_timestamp=1608469520900&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - import-from@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/import-from/download/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" @@ -3609,13 +4099,13 @@ import-lazy@^2.1.0: resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha1-VQcL44pZk88Y72236WH1vuXFoJ0= +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" @@ -3639,7 +4129,7 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" - resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" @@ -3696,12 +4186,13 @@ into-stream@^5.0.0: from2 "^2.3.0" p-is-promise "^3.0.0" -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= +into-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" + integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== dependencies: - loose-envify "^1.0.0" + from2 "^2.3.0" + p-is-promise "^3.0.0" invert-kv@^1.0.0: version "1.0.0" @@ -3768,7 +4259,7 @@ is-cidr@^3.0.0: dependencies: cidr-regex "^2.0.10" -is-core-module@^2.1.0: +is-core-module@^2.1.0, is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411557629&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha1-lwN+89UiJNhRY/VZeytj2a/tmBo= @@ -3817,6 +4308,11 @@ is-directory@^0.3.1: resolved "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3956,6 +4452,11 @@ is-plain-object@^5.0.0: resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-5.0.0.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q= +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + is-promise@^2.1.0: version "2.2.2" resolved "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz?cache=0&sync_timestamp=1588001830257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-promise%2Fdownload%2Fis-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -4007,7 +4508,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -4022,10 +4523,12 @@ is-windows@^1.0.1, is-windows@^1.0.2: resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" isarray@0.0.1: version "0.0.1" @@ -4070,411 +4573,426 @@ issue-parser@^6.0.0: lodash.isstring "^4.0.1" lodash.uniqby "^4.7.0" -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k= +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha1-pfY9kfC7wMPkee9MXeAnM17G1jA= - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha1-WoETzXRtQ8SInro2qxDn1QybTzM= +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha1-KEmXxIIRdS7EhiU9qX44ed77qMg= +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" + istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.2.6: - version "2.2.7" - resolved "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha1-XZOfYjfXtIOTzAlZ6rQM1P0FaTE= +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== dependencies: html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" java-properties@^1.0.0: version "1.0.2" resolved "https://registry.npm.taobao.org/java-properties/download/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" integrity sha1-zNH6c5B0OKW1w4mCJp0Odx/nghE= -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha1-CNjBXreaf6P8mCabwUtFHugvgDk= +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" -jest-cli@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-cli/download/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" - integrity sha1-rS3mLQdHLUGcarwwH8QyuYsQ0q8= +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: - "@jest/core" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" exit "^0.1.2" - import-local "^2.0.0" + graceful-fs "^4.2.4" + import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^13.3.0" + yargs "^15.4.1" -jest-config@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-config/download/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" - integrity sha1-+xu8YMc6Rq8DWQcZ76SCXm5N0bU= +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.9.0" - "@jest/types" "^24.9.0" - babel-jest "^24.9.0" - chalk "^2.0.1" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" glob "^7.1.1" - jest-environment-jsdom "^24.9.0" - jest-environment-node "^24.9.0" - jest-get-type "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - micromatch "^3.1.10" - pretty-format "^24.9.0" - realpath-native "^1.1.0" - -jest-diff@^24.3.0, jest-diff@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-diff/download/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" - integrity sha1-kxt9DVd4obr3RSy4FuMl43JAVdo= + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: - chalk "^2.0.1" - diff-sequences "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-docblock@^24.3.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-docblock/download/jest-docblock-24.9.0.tgz?cache=0&sync_timestamp=1588614998936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-docblock%2Fdownload%2Fjest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" - integrity sha1-eXAgGAK6Vg4cQJLMJcvt9a9ajOI= +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== dependencies: - detect-newline "^2.1.0" + detect-newline "^3.0.0" -jest-each@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-each/download/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" - integrity sha1-6y2mAuKmEImNvF8fbfO6hrVfiwU= +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== dependencies: - "@jest/types" "^24.9.0" - chalk "^2.0.1" - jest-get-type "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - -jest-environment-jsdom@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" - integrity sha1-SwgGx/yU+V7bNpppzCd47sK3N1s= - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - jsdom "^11.5.1" - -jest-environment-node@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-24.9.0.tgz?cache=0&sync_timestamp=1601981707099&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-environment-node%2Fdownload%2Fjest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" - integrity sha1-Mz0tJ5b5aH8q7r8HQrUZ8zwcv9M= - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha1-FoSgyKUPLkkBtmRK6GH1ee7S7w4= - -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha1-s4pdZCdJNOIfpBeump++t3zqrH0= - dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" optionalDependencies: - fsevents "^1.2.7" + fsevents "^2.1.2" -jest-jasmine2@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" - integrity sha1-H3sb0yQsF3TmKsq7NkbZavw75qA= +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" co "^4.6.0" - expect "^24.9.0" + expect "^26.6.2" is-generator-fn "^2.0.0" - jest-each "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - throat "^4.0.0" - -jest-leak-detector@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" - integrity sha1-tmXep8dxAMXE99/LFTtlzwfc+Wo= - dependencies: - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-matcher-utils@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" - integrity sha1-9bNmHV5ijf/m3WUlHf2uDofDoHM= + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== dependencies: - chalk "^2.0.1" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-message-util/download/jest-message-util-24.9.0.tgz?cache=0&sync_timestamp=1601981690584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-message-util%2Fdownload%2Fjest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha1-Un9UoeOA9eICqNEUmw7IcvQxGeM= +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" -jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-mock/download/jest-mock-24.9.0.tgz?cache=0&sync_timestamp=1601981687907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-mock%2Fdownload%2Fjest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha1-wig1VB7jebkIZzrVEIeiGFwT8cY= +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== dependencies: - "@jest/types" "^24.9.0" + "@jest/types" "^26.6.2" + "@types/node" "*" -jest-pnp-resolver@^1.2.1: +jest-pnp-resolver@^1.2.2: version "1.2.2" - resolved "https://registry.npm.taobao.org/jest-pnp-resolver/download/jest-pnp-resolver-1.2.2.tgz?cache=0&sync_timestamp=1592991657938&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-pnp-resolver%2Fdownload%2Fjest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha1-twSsCuAoqJEIpNBAs/kZ393I4zw= - -jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-24.9.0.tgz?cache=0&sync_timestamp=1588615314194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-regex-util%2Fdownload%2Fjest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha1-wT+zOAveIr9ldUMsST6o/jeWVjY= - -jest-resolve-dependencies@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" - integrity sha1-rQVRmJWcTPuopPBmxnOj8HhlB6s= - dependencies: - "@jest/types" "^24.9.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.9.0" - -jest-resolve@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-resolve/download/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" - integrity sha1-3/BMdoevNMTdflJIktnPd+XRcyE= - dependencies: - "@jest/types" "^24.9.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-runner/download/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" - integrity sha1-V0+v29VEVcKzS0vfQ2WiOFf830I= - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.4.2" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-leak-detector "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-runtime/download/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" - integrity sha1-nxRYOvak9zFKap2fAibhp4HI5Kw= - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - chalk "^2.0.1" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^13.3.0" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-24.9.0.tgz?cache=0&sync_timestamp=1601890139477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-serializer%2Fdownload%2Fjest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha1-5tfX75bTHouQeacUdUxdXFgojnM= +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" -jest-snapshot@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" - integrity sha1-7I6cpPLsDFyHro+SXPl0l7DpUbo= +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - expect "^24.9.0" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - mkdirp "^0.5.1" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" natural-compare "^1.4.0" - pretty-format "^24.9.0" - semver "^6.2.0" - -jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-util/download/jest-util-24.9.0.tgz?cache=0&sync_timestamp=1601981689795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-util%2Fdownload%2Fjest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha1-c5aBTkhTbS6Fo33j5MQx18sUAWI= - dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.1.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" + micromatch "^4.0.2" -jest-validate@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-validate/download/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha1-B3XFU2DRc82FTkAYB1bU/1Le+Ks= +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^24.9.0" + pretty-format "^26.6.2" -jest-watcher@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-watcher/download/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" - integrity sha1-S1bl0c7/AF9biOUo3Jr8jdTtKzs= +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.9.0" - string-length "^2.0.0" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" -jest-worker@^24.6.0, jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-24.9.0.tgz?cache=0&sync_timestamp=1601890178757&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U= +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: + "@types/node" "*" merge-stream "^2.0.0" - supports-color "^6.1.0" + supports-color "^7.0.0" -jest@^24.3.1: - version "24.9.0" - resolved "https://registry.npm.taobao.org/jest/download/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" - integrity sha1-mH0pDAWgi1LFYYjBAC42jtsAcXE= +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: - import-local "^2.0.0" - jest-cli "^24.9.0" + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796305651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= @@ -4492,36 +5010,36 @@ jsbn@~0.1.0: resolved "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.npm.taobao.org/jsdom/download/jsdom-11.12.0.tgz?cache=0&sync_timestamp=1596916185263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsdom%2Fdownload%2Fjsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha1-GoDUDd03ih3lllbp5txaO6hle8g= - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" +jsdom@^16.4.0: + version "16.5.1" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.5.1.tgz#4ced6bbd7b77d67fb980e64d9e3e6fb900f97dd6" + integrity sha512-pF73EOsJgwZekbDHEY5VO/yKXUkab/DuvrQB/ANVizbr6UAHJsDdHXuotZYwkJSGQl1JM+ivXaqY+XBDDL4TiA== + dependencies: + abab "^2.0.5" + acorn "^8.0.5" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "6.0.1" + request "^2.88.2" + request-promise-native "^1.0.9" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.4.4" xml-name-validator "^3.0.0" jsep@^0.3.0: @@ -4549,6 +5067,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -4655,11 +5178,6 @@ lcov-parse@^1.0.0: resolved "https://registry.npm.taobao.org/lcov-parse/download/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/left-pad/download/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha1-W4o6d2Xf4AEmHd6RVYnngvjJTR4= - leven@^3.1.0: version "3.1.0" resolved "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5006,11 +5524,6 @@ lodash.map@^4.5.1: resolved "https://registry.npm.taobao.org/lodash.map/download/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz?cache=0&sync_timestamp=1589682725270&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.memoize%2Fdownload%2Flodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -5041,7 +5554,12 @@ lodash.without@~4.4.0: resolved "https://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: +lodash@4.x, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.20" resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597336147792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI= @@ -5079,13 +5597,6 @@ longest@^2.0.1: resolved "https://registry.npm.taobao.org/longest/download/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -5120,13 +5631,12 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: - pify "^4.0.1" - semver "^5.6.0" + semver "^6.0.0" make-error@1.x: version "1.3.6" @@ -5179,22 +5689,22 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked-terminal@^4.0.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/marked-terminal/download/marked-terminal-4.1.0.tgz#01087372d3636dc7cb286475a1d6147187f500e0" - integrity sha1-AQhzctNjbcfLKGR1odYUcYf1AOA= +marked-terminal@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/marked-terminal/-/marked-terminal-4.1.1.tgz#34a6f063cd6cfe26bffaf5bac3724e24242168a9" + integrity sha512-t7Mdf6T3PvOEyN01c3tYxDzhyKZ8xnkp8Rs6Fohno63L/0pFTJ5Qtwto2AQVuDtbQiWzD+4E5AAu1Z2iLc8miQ== dependencies: ansi-escapes "^4.3.1" cardinal "^2.1.1" - chalk "^4.0.0" + chalk "^4.1.0" cli-table "^0.3.1" node-emoji "^1.10.0" supports-hyperlinks "^2.1.0" -marked@^1.0.0: - version "1.2.7" - resolved "https://registry.npm.taobao.org/marked/download/marked-1.2.7.tgz?cache=0&sync_timestamp=1608123294281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarked%2Fdownload%2Fmarked-1.2.7.tgz#6e14b595581d2319cdcf033a24caaf41455a01fb" - integrity sha1-bhS1lVgdIxnNzwM6JMqvQUVaAfs= +marked@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/marked/-/marked-2.0.1.tgz#5e7ed7009bfa5c95182e4eb696f85e948cefcee3" + integrity sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw== matcher@^1.0.0: version "1.1.1" @@ -5252,7 +5762,7 @@ merge@^1.2.1: resolved "https://registry.npm.taobao.org/merge/download/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= @@ -5313,8 +5823,8 @@ min-indent@^1.0.0: minimatch@^3.0.4: version "3.0.4" - resolved "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" @@ -5371,7 +5881,12 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: +mkdirp@1.x: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: version "0.5.5" resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= @@ -5436,11 +5951,6 @@ mute-stream@~0.0.4: resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha1-174036MQW5FJTDFHCJMV7/iHSwE= - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5526,16 +6036,22 @@ node-modules-regexp@^1.0.0: resolved "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^5.4.2: - version "5.4.3" - resolved "https://registry.npm.taobao.org/node-notifier/download/node-notifier-5.4.3.tgz?cache=0&sync_timestamp=1597311416653&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-notifier%2Fdownload%2Fnode-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha1-y3La+UyTkECY4oucWQ/YZuRkvVA= +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" + is-wsl "^2.2.0" + semver "^7.3.2" shellwords "^0.1.1" - which "^1.3.0" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== nopt@^4.0.1, nopt@^4.0.3: version "4.0.3" @@ -5572,6 +6088,11 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + normalize-url@^5.0.0: version "5.3.0" resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-5.3.0.tgz?cache=0&sync_timestamp=1602432879767&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-5.3.0.tgz#8959b3cdaa295b61592c1f245dded34b117618dd" @@ -5728,10 +6249,10 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npm@^6.14.8: +npm@^6.14.8, npm@^6.14.9: version "6.14.11" - resolved "https://registry.npm.taobao.org/npm/download/npm-6.14.11.tgz?cache=0&sync_timestamp=1610071027467&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm%2Fdownload%2Fnpm-6.14.11.tgz#e0b5598d7b9a42d275e61d8bd28cd7eee0074a3b" - integrity sha1-4LVZjXuaQtJ15h2L0ozX7uAHSjs= + resolved "https://registry.npmjs.org/npm/-/npm-6.14.11.tgz#e0b5598d7b9a42d275e61d8bd28cd7eee0074a3b" + integrity sha512-1Zh7LjuIoEhIyjkBflSSGzfjuPQwDlghNloppjruOH5bmj9midT9qcNT0tRUZRR04shU9ekrxNy9+UTBrqeBpQ== dependencies: JSONStream "^1.3.5" abbrev "~1.1.1" @@ -5864,10 +6385,10 @@ number-is-nan@^1.0.0: resolved "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7: +nwsapi@^2.2.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha1-IEh5qePQaP8qVROcLHcngGgaOLc= + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" @@ -5924,14 +6445,6 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha1-Npvx+VktiridcS3O1cuBx8U1Jkk= - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -6016,13 +6529,6 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/p-each-series/download/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" - p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.npm.taobao.org/p-each-series/download/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -6097,11 +6603,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - p-reduce@^2.0.0: version "2.1.0" resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" @@ -6217,10 +6718,10 @@ parse-passwd@^1.0.0: resolved "https://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg= +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== pascalcase@^0.1.1: version "0.1.1" @@ -6239,7 +6740,7 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: @@ -6286,7 +6787,7 @@ performance-now@^2.1.0: resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.5, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0= @@ -6306,11 +6807,6 @@ pify@^3.0.0: resolved "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -6338,14 +6834,7 @@ pkg-conf@^2.1.0: find-up "^2.0.0" load-json-file "^4.0.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= @@ -6359,11 +6848,6 @@ please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: dependencies: semver-compare "^1.0.0" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs= - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -6391,25 +6875,25 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.1.2: - version "2.1.2" - resolved "https://registry.npm.taobao.org/prettier/download/prettier-2.1.2.tgz?cache=0&sync_timestamp=1600217249280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" - integrity sha1-MFBwDa4uTItnxMP2Zs24r0BeHOU= +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.npm.taobao.org/pretty-format/download/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha1-EvrDGzcBmk7qPBGqmpWet2KKp8k= +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" -pretty-quick@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/pretty-quick/download/pretty-quick-3.0.2.tgz#7ed460f7e43a647b1044ad8b7f41a0c8a7f1c51c" - integrity sha1-ftRg9+Q6ZHsQRK2Lf0GgyKfxxRw= +pretty-quick@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.0.tgz#cb172e9086deb57455dea7c7e8f136cd0a4aef6c" + integrity sha512-DtxIxksaUWCgPFN7E1ZZk4+Aav3CCuRdhrDSFZENb404sYMtuo9Zka823F+Mgeyt8Zt3bUiCjFzzWYE9LYqkmQ== dependencies: chalk "^3.0.0" execa "^4.0.0" @@ -6483,7 +6967,7 @@ pseudomap@^1.0.2: resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= @@ -6562,10 +7046,10 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^16.8.4: - version "16.13.1" - resolved "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz?cache=0&sync_timestamp=1602081924455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ= +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: version "1.0.5" @@ -6615,14 +7099,6 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha1-GyIcYIi6d5lgHICPkRYcZuWPiXg= - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -6709,13 +7185,6 @@ readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: graceful-fs "^4.1.2" once "^1.3.0" -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/realpath-native/download/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha1-IAMpT+oj+wZy8kduviL89Jii1lw= - dependencies: - util.promisify "^1.0.0" - redent@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/redent/download/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -6793,16 +7262,16 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.5: +request-promise-native@^1.0.9: version "1.0.9" - resolved "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg= + resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== dependencies: request-promise-core "1.1.4" stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= @@ -6833,6 +7302,11 @@ require-directory@^2.1.1: resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -6843,12 +7317,12 @@ require-main-filename@^2.0.0: resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: - resolve-from "^3.0.0" + resolve-from "^5.0.0" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" @@ -6885,18 +7359,6 @@ resolve-url@^0.2.1: resolved "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz?cache=0&sync_timestamp=1585438700247&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.x, resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha1-sllBtUloIxzC0bt2p5y38sC/hEQ= - dependencies: - path-parse "^1.0.6" - resolve@^1.10.0, resolve@^1.17.0: version "1.19.0" resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" @@ -6905,6 +7367,21 @@ resolve@^1.10.0, resolve@^1.17.0: is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.18.1: + version "1.20.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha1-sllBtUloIxzC0bt2p5y38sC/hEQ= + dependencies: + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6933,13 +7410,6 @@ reusify@^1.0.4: resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1589682814592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha1-stEE/g2Psnz54KHNqCYt04M8bKs= - dependencies: - glob "^7.1.3" - rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -6947,10 +7417,10 @@ rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimra dependencies: glob "^7.1.3" -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -7025,15 +7495,17 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" -semantic-release@^17.3.1: - version "17.3.1" - resolved "https://registry.npm.taobao.org/semantic-release/download/semantic-release-17.3.1.tgz#8904ef1ca8e704394de0e204b284f6c252284da4" - integrity sha1-iQTvHKjnBDlN4OIEsoT2wlIoTaQ= +semantic-release@^17.4.2: + version "17.4.2" + resolved "https://registry.npmjs.org/semantic-release/-/semantic-release-17.4.2.tgz#b5147b5a629c227b7074ad4cc89920a14cb08c96" + integrity sha512-TPLWuoe2L2DmgnQEh+OLWW5V1T+ZAa1xWuHXsuPAWEko0BqSdLPl+5+BlQ+D5Bp27S5gDJ1//Y1tgbmvUhnOCw== dependencies: "@semantic-release/commit-analyzer" "^8.0.0" "@semantic-release/error" "^2.2.0" @@ -7041,19 +7513,19 @@ semantic-release@^17.3.1: "@semantic-release/npm" "^7.0.0" "@semantic-release/release-notes-generator" "^9.0.0" aggregate-error "^3.0.0" - cosmiconfig "^6.0.0" + cosmiconfig "^7.0.0" debug "^4.0.0" env-ci "^5.0.0" - execa "^4.0.0" + execa "^5.0.0" figures "^3.0.0" find-versions "^4.0.0" - get-stream "^5.0.0" + get-stream "^6.0.0" git-log-parser "^1.2.0" hook-std "^2.0.0" - hosted-git-info "^3.0.0" + hosted-git-info "^4.0.0" lodash "^4.17.15" - marked "^1.0.0" - marked-terminal "^4.0.0" + marked "^2.0.0" + marked-terminal "^4.1.1" micromatch "^4.0.2" p-each-series "^2.1.0" p-reduce "^2.0.0" @@ -7062,7 +7534,7 @@ semantic-release@^17.3.1: semver "^7.3.2" semver-diff "^3.1.1" signale "^1.2.1" - yargs "^15.0.1" + yargs "^16.2.0" semver-compare@^1.0.0: version "1.0.0" @@ -7088,23 +7560,23 @@ semver-regex@^3.1.2: resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" integrity sha1-NLTA02Hu8mLgcZnb7zFtDyqxGAc= -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= - -semver@^7.1.2, semver@^7.3.2: +semver@7.x, semver@^7.1.2, semver@^7.3.2: version "7.3.4" resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc= dependencies: lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= + semver@^7.2.1: version "7.3.2" resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" @@ -7192,11 +7664,6 @@ sisteransi@^1.0.4: resolved "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q= - slash@^3.0.0: version "3.0.0" resolved "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -7207,14 +7674,14 @@ slice-ansi@0.0.4: resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY= +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: version "1.1.6" @@ -7319,6 +7786,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + spawn-error-forwarder@~1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/spawn-error-forwarder/download/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" @@ -7410,10 +7882,12 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha1-M+ujiXeIVYvr/C2wWdwVjsNs67g= +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" staged-git-files@1.1.2: version "1.1.2" @@ -7472,13 +7946,13 @@ string-argv@^0.0.2: resolved "https://registry.npm.taobao.org/string-argv/download/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/string-length/download/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" string-width@^1.0.1: version "1.0.2" @@ -7600,7 +8074,7 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-bom@4.0.0: +strip-bom@4.0.0, strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg= @@ -7654,13 +8128,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM= - dependencies: - has-flag "^3.0.0" - supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1608035619713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -7668,7 +8135,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.1.0: +supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: version "2.1.0" resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" integrity sha1-9mPfJSr183xdSbvX7u+p4Lnlnkc= @@ -7681,25 +8148,25 @@ symbol-observable@^1.1.0: resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz?cache=0&sync_timestamp=1601494689361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ= -symbol-tree@^3.2.2: +symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I= + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== synchronous-promise@^2.0.6: version "2.0.15" resolved "https://registry.npm.taobao.org/synchronous-promise/download/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" integrity sha1-B8oYIrneAAH1/3NZXz0IxPcg644= -table@^5.2.3: - version "5.4.6" - resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha1-EpLRlQDOP4YFOwXw6Ofko7shB54= +table@^6.0.4: + version "6.0.7" + resolved "https://registry.npmjs.org/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: version "4.4.13" @@ -7737,15 +8204,22 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.npm.taobao.org/test-exclude/download/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha1-w9Ph4xHrfuQF4JLawQrv0JCR6sA= +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: - glob "^7.1.3" + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" text-extensions@^1.0.0: version "1.9.0" @@ -7757,10 +8231,10 @@ text-table@^0.2.0, text-table@~0.2.0: resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: version "2.0.5" @@ -7846,7 +8320,7 @@ toposort@^2.0.2: resolved "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= -tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584645751908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= @@ -7854,12 +8328,21 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - punycode "^2.1.0" + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" traverse@~0.6.6: version "0.6.6" @@ -7876,21 +8359,21 @@ trim-off-newlines@^1.0.0: resolved "https://registry.npm.taobao.org/trim-off-newlines/download/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= -ts-jest@^24.0.0: - version "24.3.0" - resolved "https://registry.npm.taobao.org/ts-jest/download/ts-jest-24.3.0.tgz?cache=0&sync_timestamp=1601375629408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-jest%2Fdownload%2Fts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" - integrity sha1-uXgU4+qzWeqEChrBEt6uaKpECGk= +ts-jest@^26.5.3: + version "26.5.3" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.3.tgz#a6ee00ba547be3b09877550df40a1465d0295554" + integrity sha512-nBiiFGNvtujdLryU7MiMQh1iPmnZ/QvOskBbD2kURiI1MwqvxlxNnaAB/z9TbslMqCsSbu5BXvSSQPc5tvHGeA== dependencies: bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" + jest-util "^26.1.0" json5 "2.x" - lodash.memoize "4.x" + lodash "4.x" make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "10.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.0" @@ -7956,6 +8439,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.11.0: version "0.11.0" resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" @@ -7971,6 +8459,11 @@ type-fest@^0.18.0: resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.18.1.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha1-20vBUaSiz07r+a3V23VQjbbMhB8= +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -7981,6 +8474,13 @@ type-fest@^0.8.1: resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -8049,7 +8549,7 @@ universal-user-agent@^6.0.0: resolved "https://registry.npm.taobao.org/universal-user-agent/download/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha1-M4H4UDslHA2c0hvB3pOeyd9UgO4= -universalify@^0.1.0: +universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= @@ -8144,26 +8644,30 @@ util-promisify@^2.1.0: dependencies: object.getownpropertydescriptors "^2.0.3" -util.promisify@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha1-a693dLgO6w91INi4HQeYKlmruu4= - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4= +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz?cache=0&sync_timestamp=1590871780233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha1-VLw83UMxe8qR413K8wWxpyN950U= +v8-to-istanbul@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" + integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -8188,13 +8692,20 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -w3c-hr-time@^1.0.1: +w3c-hr-time@^1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha1-ConN9cwVgi35w2BUNnaWPgzDCM0= + resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -8209,40 +8720,36 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha1-qFWYCx8LazWbodXZ+zmulB+qY60= +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: version "1.0.5" - resolved "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA= + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: +whatwg-mimetype@^2.3.0: version "2.3.0" - resolved "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78= - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-6.5.0.tgz?cache=0&sync_timestamp=1601488446581&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha1-8t8Cv/F2/WUHDfdK1cy7WhmZZag= - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1601488446581&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY= +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== dependencies: lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" which-module@^2.0.0: version "2.0.0" @@ -8256,7 +8763,7 @@ which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= @@ -8321,8 +8828,17 @@ wrap-ansi@^5.1.0: wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM= + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" @@ -8330,18 +8846,9 @@ wrap-ansi@^6.2.0: wrappy@1: version "1.0.2" - resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha1-0LBUY8GIroBDlv1asqNwBir4dSk= - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: version "2.4.3" resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" @@ -8351,19 +8858,20 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write@1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz?cache=0&sync_timestamp=1567579932525&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite%2Fdownload%2Fwrite-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM= +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - mkdirp "^0.5.1" + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz?cache=0&sync_timestamp=1593925601875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha1-3/7xSGa46NyRM1glFNG++vlumA8= - dependencies: - async-limiter "~1.0.0" +ws@^7.4.4: + version "7.4.4" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== xdg-basedir@^3.0.0: version "3.0.0" @@ -8375,6 +8883,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo= +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xtend@~4.0.1: version "4.0.2" resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -8390,6 +8903,11 @@ y18n@^4.0.0: resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.1.tgz?cache=0&sync_timestamp=1609798970194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha1-jbK4PDHF11CZu4kLI/MJSJHiR9Q= +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -8405,25 +8923,15 @@ yallist@^4.0.0: resolved "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= -yaml@^1.10.0, yaml@^1.7.2: +yaml@^1.10.0: version "1.10.0" resolved "https://registry.npm.taobao.org/yaml/download/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha1-O1k63ZRIdgd9TWg/7gEIG9n/8x4= -yargs-parser@10.x: - version "10.1.0" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha1-cgImW4n36eny5XZeD+c1qQXtuqg= - dependencies: - camelcase "^4.1.0" - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1601576779920&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.x, yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== yargs-parser@^15.0.1: version "15.0.1" @@ -8435,8 +8943,8 @@ yargs-parser@^15.0.1: yargs-parser@^18.1.2: version "18.1.3" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A= + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" @@ -8453,22 +8961,6 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1600660076179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yargs@^14.2.3: version "14.2.3" resolved "https://registry.npm.taobao.org/yargs/download/yargs-14.2.3.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" @@ -8486,10 +8978,10 @@ yargs@^14.2.3: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.0.1: +yargs@^15.4.1: version "15.4.1" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg= + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" decamelize "^1.2.0" @@ -8503,6 +8995,19 @@ yargs@^15.0.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^8.0.2: version "8.0.2" resolved "https://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" From fe3f10f58ce60eb30d2952a0d9d32ebee377dcb6 Mon Sep 17 00:00:00 2001 From: hsluoyz Date: Sun, 14 Mar 2021 21:22:49 +0800 Subject: [PATCH 425/497] Fix README code. --- README.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 51f3bd80..c4e76535 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,12 @@ yarn add casbin New a `node-casbin` enforcer with a model file and a policy file, see [Model](#official-model) section for details: -```typescript -import { newEnforcer } from 'casbin'; +```node.js +// For Node.js: +const { newEnforcer } = require('casbin'); +// For browser: +// import { newEnforcer } from 'casbin'; + const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv'); ``` @@ -59,12 +63,16 @@ const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv'); Add an enforcement hook into your code right before the access happens: -```typescript +```node.js const sub = 'alice'; // the user that wants to access a resource. const obj = 'data1'; // the resource that is going to be accessed. const act = 'read'; // the operation that the user performs on the resource. +// Async: const res = await enforcer.enforce(sub, obj, act); +// Sync: +// const res = enforcer.enforceSync(sub, obj, act); + if (res) { // permit alice to read data1 } else { @@ -75,7 +83,7 @@ if (res) { Besides the static policy file, `node-casbin` also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: -```typescript +```node.js const roles = await enforcer.getRolesForUser('alice'); ``` From 59534114533a9d4a4d3f2b7dd7b6ac8b9184aad5 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Thu, 18 Mar 2021 14:16:53 +0800 Subject: [PATCH 426/497] refactor: refactor rm to rmMap Signed-off-by: Zxilly --- src/coreEnforcer.ts | 27 +++++++++++++++++++++------ src/enforcer.ts | 25 +++++++++++++++++-------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 9df227e0..5b612de0 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -35,7 +35,7 @@ export class CoreEnforcer { protected adapter: UpdatableAdapter | FilteredAdapter | Adapter | BatchAdapter; protected watcher: Watcher | null = null; - protected rm: RoleManager = new DefaultRoleManager(10); + protected rmMap: Map = new Map([['g', new DefaultRoleManager(10)]]); protected enabled = true; protected autoSave = true; @@ -116,14 +116,14 @@ export class CoreEnforcer { * @param rm the role manager. */ public setRoleManager(rm: RoleManager): void { - this.rm = rm; + this.rmMap.set('g', rm); } /** * getRoleManager gets the current role manager. */ public getRoleManager(): RoleManager { - return this.rm; + return this.rmMap.get('g'); } /** @@ -142,6 +142,16 @@ export class CoreEnforcer { this.model.clearPolicy(); } + // public initRmMap(): void { + // this.rmMap = new Map(); + // const rm = this.model.model.get('g'); + // if (rm) { + // for (const ptype of rm.keys()) { + // this.rmMap.set(ptype, new DefaultRoleManager(10)); + // } + // } + // } + /** * loadPolicy reloads the policy from file/database. */ @@ -266,12 +276,17 @@ export class CoreEnforcer { * @param rules policies */ public async buildIncrementalRoleLinks(op: PolicyOp, ptype: string, rules: string[][]): Promise { - await this.model.buildIncrementalRoleLinks(this.rm, op, 'g', ptype, rules); + for (const rmKey of this.rmMap.keys()) { + await this.model.buildIncrementalRoleLinks(this.rmMap.get(rmKey), op, rmKey, ptype, rules); + } } protected async buildRoleLinksInternal(): Promise { - await this.rm.clear(); - await this.model.buildRoleLinks(this.rm); + // await this.model.buildRoleLinks(this.rmMap); + for (const rm of this.rmMap.values()) { + rm.clear(); + await this.model.buildRoleLinks(rm); + } } private *privateEnforce(asyncCompile = true, ...rvals: any[]): Generator> { diff --git a/src/enforcer.ts b/src/enforcer.ts index 5faff2d7..f4527178 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -17,6 +17,7 @@ import { Model, newModel } from './model'; import { Adapter, FileAdapter, StringAdapter } from './persist'; import { getLogger } from './log'; import { arrayRemoveDuplicates } from './util'; +import RuntimeError = WebAssembly.RuntimeError; /** * Enforcer = ManagementEnforcer + RBAC API. @@ -80,11 +81,15 @@ export class Enforcer extends ManagementEnforcer { * @return the roles that the user has. */ public async getRolesForUser(name: string, domain?: string): Promise { - if (domain === undefined) { - return this.rm.getRoles(name); - } else { - return this.rm.getRoles(name, domain); + const rm = this.rmMap.get('g'); + if (rm) { + if (domain === undefined) { + return rm.getRoles(name); + } else { + return rm.getRoles(name, domain); + } } + throw new RuntimeError(); } /** @@ -95,11 +100,15 @@ export class Enforcer extends ManagementEnforcer { * @return the users that has the role. */ public async getUsersForRole(name: string, domain?: string): Promise { - if (domain === undefined) { - return this.rm.getUsers(name); - } else { - return this.rm.getUsers(name, domain); + const rm = this.rmMap.get('g'); + if (rm) { + if (domain === undefined) { + return rm.getUsers(name); + } else { + return rm.getUsers(name, domain); + } } + throw new RuntimeError(); } /** From 65d3a2655c638085938de9df4efa5a7d16bfa788 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Thu, 18 Mar 2021 19:43:06 +0800 Subject: [PATCH 427/497] feat: add named addMatchingFunc Signed-off-by: Zxilly --- .prettierrc | 3 ++- src/coreEnforcer.ts | 27 +++++++++++++++++++++++++++ src/rbac/defaultRoleManager.ts | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.prettierrc b/.prettierrc index 59f723ce..9f95cae1 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,6 @@ { "semi": true, "singleQuote": true, - "printWidth": 140 + "printWidth": 140, + "endOfLine": "auto" } diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 5b612de0..f125fe60 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -20,6 +20,7 @@ import { Adapter, FilteredAdapter, Watcher, BatchAdapter, UpdatableAdapter } fro import { DefaultRoleManager, RoleManager } from './rbac'; import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval, generatorRunSync, generatorRunAsync } from './util'; import { getLogger, logPrint } from './log'; +import { MatchingFunc } from './rbac'; type Matcher = ((context: any) => Promise) | ((context: any) => any); @@ -262,6 +263,32 @@ export class CoreEnforcer { this.autoBuildRoleLinks = autoBuildRoleLinks; } + /** + * add matching function to RoleManager by ptype + * @param ptype g + * @param fn the function will be added + */ + public async addNamedMatchingFunc(ptype: string, fn: MatchingFunc): Promise { + const rm = this.rmMap.get(ptype); + if (rm) { + return await (rm).addMatchingFunc(fn); + } + + throw Error('Target ptype not found.'); + } + + /** + * add domain matching function to RoleManager by ptype + * @param ptype g + * @param fn the function will be added + */ + public async addNamedDomainMatchingFunc(ptype: string, fn: MatchingFunc): Promise { + const rm = this.rmMap.get(ptype); + if (rm) { + return await (rm).addDomainMatchingFunc(fn); + } + } + /** * buildRoleLinks manually rebuild the role inheritance relations. */ diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 51959550..5bef7602 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -15,7 +15,7 @@ import { RoleManager } from './roleManager'; import { getLogger, logPrint } from '../log'; -type MatchingFunc = (arg1: string, arg2: string) => boolean; +export type MatchingFunc = (arg1: string, arg2: string) => boolean; // DEFAULT_DOMAIN defines the default domain space. const DEFAULT_DOMAIN = 'casbin::default'; From 523ce8508ce45d7e79673bb0b498ed017772815d Mon Sep 17 00:00:00 2001 From: Zxilly Date: Thu, 18 Mar 2021 19:51:04 +0800 Subject: [PATCH 428/497] fix: add missing await Signed-off-by: Zxilly --- src/coreEnforcer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index f125fe60..1425c7c4 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -311,7 +311,7 @@ export class CoreEnforcer { protected async buildRoleLinksInternal(): Promise { // await this.model.buildRoleLinks(this.rmMap); for (const rm of this.rmMap.values()) { - rm.clear(); + await rm.clear(); await this.model.buildRoleLinks(rm); } } From 70e4e12610dc42b6f25f8df268611ee1a0cbc7bd Mon Sep 17 00:00:00 2001 From: Zxilly Date: Thu, 18 Mar 2021 22:04:55 +0800 Subject: [PATCH 429/497] feat: add sync mode Signed-off-by: Zxilly --- src/syncedEnforcer.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/syncedEnforcer.ts b/src/syncedEnforcer.ts index 37e5a6b0..45ad846a 100644 --- a/src/syncedEnforcer.ts +++ b/src/syncedEnforcer.ts @@ -15,6 +15,7 @@ import { Enforcer, newEnforcerWithClass } from './enforcer'; import AwaitLock from 'await-lock'; import { Watcher } from './persist'; +import { MatchingFunc } from './rbac'; // SyncedEnforcer wraps Enforcer and provides synchronized access export class SyncedEnforcer extends Enforcer { @@ -477,6 +478,28 @@ export class SyncedEnforcer extends Enforcer { await this.lock.acquireAsync(); return super.removeFilteredNamedGroupingPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); } + + /** + * add matching function to RoleManager by ptype + * @param ptype g + * @param fn the function will be added + */ + public async addNamedMatchingFunc(ptype: string, fn: MatchingFunc): Promise { + await this.lock.acquireAsync(); + return super.addNamedMatchingFunc(ptype, fn).finally(() => this.lock.release()); + } + + /** + * add domain matching function to RoleManager by ptype + * @param ptype g + * @param fn the function will be added + */ + public async addNamedDomainMatchingFunc(ptype: string, fn: MatchingFunc): Promise { + await this.lock.acquireAsync(); + return super.addNamedDomainMatchingFunc(ptype, fn).finally(() => { + this.lock.release(); + }); + } } // newSyncedEnforcer creates a synchronized enforcer via file or DB. From 3cd5b7307b54342849029c957ceec81fc84f0fdd Mon Sep 17 00:00:00 2001 From: Zxilly Date: Thu, 18 Mar 2021 23:21:16 +0800 Subject: [PATCH 430/497] feat: add unittest Signed-off-by: Zxilly --- test/model.test.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/model.test.ts b/test/model.test.ts index 29288976..fe1a4e1f 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -309,9 +309,7 @@ test('TestRBACModelWithPattern', async () => { // You can see in policy that: "g2, /book/:id, book_group", so in "g2()" function in the matcher, instead // of checking whether "/book/:id" equals the obj: "/book/1", it checks whether the pattern matches. // You can see it as normal RBAC: "/book/:id" == "/book/1" becomes KeyMatch2("/book/:id", "/book/1") - const rm = e.getRoleManager() as DefaultRoleManager; - await rm.addMatchingFunc(keyMatch2Func); - await e.buildRoleLinks(); + await e.addNamedMatchingFunc('g2', keyMatch2Func); await testEnforce(e, 'alice', '/book/1', 'GET', true); await testEnforce(e, 'alice', '/book/2', 'GET', true); await testEnforce(e, 'alice', '/pen/1', 'GET', true); @@ -323,8 +321,8 @@ test('TestRBACModelWithPattern', async () => { // AddMatchingFunc() is actually setting a function because only one function is allowed, // so when we set "KeyMatch3", we are actually replacing "KeyMatch2" with "KeyMatch3". - await rm.addMatchingFunc(keyMatch3Func); - await e.buildRoleLinks(); + // From v5.5.0, you can use addNamedMatchingFunc(), which resolve the problem above + await e.addNamedMatchingFunc('g2', keyMatch3Func); await testEnforce(e, 'alice', '/book2/1', 'GET', true); await testEnforce(e, 'alice', '/book2/2', 'GET', true); await testEnforce(e, 'alice', '/pen2/1', 'GET', true); From 87f801109e9cf4b0b423e3b76e1a8b9987b1b600 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Thu, 18 Mar 2021 23:21:45 +0800 Subject: [PATCH 431/497] feat: add initRmMap Signed-off-by: Zxilly --- src/coreEnforcer.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 1425c7c4..5e0f895e 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -143,15 +143,15 @@ export class CoreEnforcer { this.model.clearPolicy(); } - // public initRmMap(): void { - // this.rmMap = new Map(); - // const rm = this.model.model.get('g'); - // if (rm) { - // for (const ptype of rm.keys()) { - // this.rmMap.set(ptype, new DefaultRoleManager(10)); - // } - // } - // } + public initRmMap(): void { + this.rmMap = new Map(); + const rm = this.model.model.get('g'); + if (rm) { + for (const ptype of rm.keys()) { + this.rmMap.set(ptype, new DefaultRoleManager(10)); + } + } + } /** * loadPolicy reloads the policy from file/database. @@ -160,6 +160,8 @@ export class CoreEnforcer { this.model.clearPolicy(); await this.adapter.loadPolicy(this.model); + this.initRmMap(); + if (this.autoBuildRoleLinks) { await this.buildRoleLinksInternal(); } @@ -180,6 +182,8 @@ export class CoreEnforcer { throw new Error('filtered policies are not supported by this adapter'); } + this.initRmMap(); + if (this.autoBuildRoleLinks) { await this.buildRoleLinksInternal(); } From dc9e5b5db766d64918a7670f6b3b72f70e84ca28 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Fri, 19 Mar 2021 00:02:35 +0800 Subject: [PATCH 432/497] fix: fix errror type Signed-off-by: Zxilly --- src/enforcer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index f4527178..1cb76810 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -89,7 +89,7 @@ export class Enforcer extends ManagementEnforcer { return rm.getRoles(name, domain); } } - throw new RuntimeError(); + throw new Error("RoleManager didn't exist."); } /** @@ -108,7 +108,7 @@ export class Enforcer extends ManagementEnforcer { return rm.getUsers(name, domain); } } - throw new RuntimeError(); + throw new Error("RoleManager didn't exist."); } /** From 2f8801c47e716f69c36b49a73a45c67d9c751b92 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Fri, 19 Mar 2021 00:03:58 +0800 Subject: [PATCH 433/497] fix: remove unused import Signed-off-by: Zxilly --- src/enforcer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 1cb76810..980f293b 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -17,7 +17,6 @@ import { Model, newModel } from './model'; import { Adapter, FileAdapter, StringAdapter } from './persist'; import { getLogger } from './log'; import { arrayRemoveDuplicates } from './util'; -import RuntimeError = WebAssembly.RuntimeError; /** * Enforcer = ManagementEnforcer + RBAC API. From d5fe5acb5c7b46db99678cf366c796fb9ae1719d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 19 Mar 2021 04:45:44 +0000 Subject: [PATCH 434/497] chore(release): 5.5.0 [skip ci] # [5.5.0](https://github.com/casbin/node-casbin/compare/v5.4.2...v5.5.0) (2021-03-19) ### Bug Fixes * add missing await ([523ce85](https://github.com/casbin/node-casbin/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) * fix errror type ([dc9e5b5](https://github.com/casbin/node-casbin/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) * remove unused import ([2f8801c](https://github.com/casbin/node-casbin/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) ### Features * add initRmMap ([87f8011](https://github.com/casbin/node-casbin/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) * add named addMatchingFunc ([65d3a26](https://github.com/casbin/node-casbin/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) * add sync mode ([70e4e12](https://github.com/casbin/node-casbin/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) * add unittest ([3cd5b73](https://github.com/casbin/node-casbin/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) --- CHANGELOG.md | 17 +++++++++++++++++ package.json | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff42b02f..07d17bcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +# [5.5.0](https://github.com/casbin/node-casbin/compare/v5.4.2...v5.5.0) (2021-03-19) + + +### Bug Fixes + +* add missing await ([523ce85](https://github.com/casbin/node-casbin/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) +* fix errror type ([dc9e5b5](https://github.com/casbin/node-casbin/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) +* remove unused import ([2f8801c](https://github.com/casbin/node-casbin/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) + + +### Features + +* add initRmMap ([87f8011](https://github.com/casbin/node-casbin/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) +* add named addMatchingFunc ([65d3a26](https://github.com/casbin/node-casbin/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) +* add sync mode ([70e4e12](https://github.com/casbin/node-casbin/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) +* add unittest ([3cd5b73](https://github.com/casbin/node-casbin/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) + ## [5.4.2](https://github.com/casbin/node-casbin/compare/v5.4.1...v5.4.2) (2021-03-04) diff --git a/package.json b/package.json index 33bdeb8d..c98ed5cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.4.2", + "version": "5.5.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 763c18e7f3cfa068e7b61fdd7491dd0365b86dca Mon Sep 17 00:00:00 2001 From: Zxilly Date: Tue, 23 Mar 2021 19:46:23 +0800 Subject: [PATCH 435/497] feat: add priority_policy_explicit support (#250) * test: add unit tests for explicit priority model Signed-off-by: Zxilly * feat: add priority_policy_explicit support https://github.com/casbin/node-casbin/issues/248 Signed-off-by: Zxilly * perf: enhance batch action performance Signed-off-by: Zxilly * style: small fix Signed-off-by: Zxilly * fix: change function argument Signed-off-by: Zxilly * fix: fix incorrect implement Signed-off-by: Zxilly * refactor: refactor priority index Signed-off-by: Zxilly * feat: add update priority unittest Signed-off-by: Zxilly * perf: priority performance enhanced Signed-off-by: Zxilly * refactor: refactor updatePolicy() throw error when new rule and old rule didn't have same priority Signed-off-by: Zxilly --- examples/priority_model_explicit.conf | 14 +++++ examples/priority_policy_explicit.csv | 12 ++++ examples/priority_policy_explicit_update.csv | 13 +++++ src/coreEnforcer.ts | 18 ++++++ src/internalEnforcer.ts | 1 + src/model/model.ts | 61 ++++++++++++++++---- test/model.test.ts | 45 +++++++++++++++ 7 files changed, 152 insertions(+), 12 deletions(-) create mode 100644 examples/priority_model_explicit.conf create mode 100644 examples/priority_policy_explicit.csv create mode 100644 examples/priority_policy_explicit_update.csv diff --git a/examples/priority_model_explicit.conf b/examples/priority_model_explicit.conf new file mode 100644 index 00000000..5df75b27 --- /dev/null +++ b/examples/priority_model_explicit.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = priority, sub, obj, act, eft + +[role_definition] +g = _, _ + +[policy_effect] +e = priority(p.eft) || deny + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/examples/priority_policy_explicit.csv b/examples/priority_policy_explicit.csv new file mode 100644 index 00000000..0fec82c5 --- /dev/null +++ b/examples/priority_policy_explicit.csv @@ -0,0 +1,12 @@ +p, 10, data1_deny_group, data1, read, deny +p, 10, data1_deny_group, data1, write, deny +p, 10, data2_allow_group, data2, read, allow +p, 10, data2_allow_group, data2, write, allow + + +p, 1, alice, data1, write, allow +p, 1, alice, data1, read, allow +p, 1, bob, data2, read, deny + +g, bob, data2_allow_group +g, alice, data1_deny_group diff --git a/examples/priority_policy_explicit_update.csv b/examples/priority_policy_explicit_update.csv new file mode 100644 index 00000000..7c3b5329 --- /dev/null +++ b/examples/priority_policy_explicit_update.csv @@ -0,0 +1,13 @@ +p, 10, data1_deny_group, data1, read, deny +p, 10, data1_deny_group, data1, write, deny +p, 10, data2_allow_group, data2, read, allow +p, 10, data2_allow_group, data2, write, allow + + +p, 1, alice, data1, write, allow +p, 1, alice, data1, read, allow +p, 1, bob, data2, read, deny +p, 1, bob, data2, write, allow + +g, bob, data2_allow_group +g, alice, data1_deny_group diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 5e0f895e..110503cb 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -153,6 +153,20 @@ export class CoreEnforcer { } } + public sortPolicies(): void { + const policy = this.model.model.get('p')?.get('p')?.policy; + const tokens = this.model.model.get('p')?.get('p')?.tokens; + + if (policy && tokens) { + const priorityIndex = tokens.indexOf('p_priority'); + if (priorityIndex !== -1) { + policy.sort((a, b) => { + return parseInt(a[priorityIndex], 10) - parseInt(b[priorityIndex], 10); + }); + } + } + } + /** * loadPolicy reloads the policy from file/database. */ @@ -160,6 +174,8 @@ export class CoreEnforcer { this.model.clearPolicy(); await this.adapter.loadPolicy(this.model); + this.sortPolicies(); + this.initRmMap(); if (this.autoBuildRoleLinks) { @@ -182,6 +198,8 @@ export class CoreEnforcer { throw new Error('filtered policies are not supported by this adapter'); } + this.sortPolicies(); + this.initRmMap(); if (this.autoBuildRoleLinks) { diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 854018ee..1d639792 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -45,6 +45,7 @@ export class InternalEnforcer extends CoreEnforcer { } const ok = this.model.addPolicy(sec, ptype, rule); + if (sec === 'g' && ok) { await this.buildIncrementalRoleLinks(PolicyOp.PolicyAdd, ptype, [rule]); } diff --git a/src/model/model.ts b/src/model/model.ts index aba82ed1..65fb50e0 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -220,7 +220,24 @@ export class Model { if (!ast) { return false; } - ast.policy.push(rule); + + const policy = ast.policy; + const tokens = ast.tokens; + + const priorityIndex = tokens.indexOf('p_priority'); + + if (priorityIndex !== -1) { + const priorityRule = rule[priorityIndex]; + const insertIndex = policy.findIndex((oneRule) => oneRule[priorityIndex] >= priorityRule); + + if (priorityIndex === -1) { + policy.push(rule); + } else { + policy.splice(insertIndex, 0, rule); + } + } else { + policy.push(rule); + } return true; } @@ -240,26 +257,46 @@ export class Model { } } - ast.policy = ast.policy.concat(rules); + const priorityFlag = ast.tokens.indexOf('p_priority') !== -1; + + if (priorityFlag) { + rules.forEach((rule) => { + this.addPolicy(sec, ptype, rule); + }); + } else { + ast.policy = ast.policy.concat(rules); + } return [true, rules]; } // updatePolicy updates a policy from the model public updatePolicy(sec: string, ptype: string, oldRule: string[], newRule: string[]): boolean { - if (this.hasPolicy(sec, ptype, oldRule)) { - const ast = this.model.get(sec)?.get(ptype); - if (!ast) { - return false; - } - // const index = ast.policy.indexOf(oldRule); - const index = ast.policy.findIndex((r) => util.arrayEquals(r, oldRule)); - if (index !== -1) { + const ast = this.model.get(sec)?.get(ptype); + if (!ast) { + return false; + } + + const index = ast.policy.findIndex((r) => util.arrayEquals(r, oldRule)); + if (index === -1) { + return false; + } + + const priorityIndex = ast.tokens.indexOf('p_priority'); + + if (priorityIndex !== -1) { + if (oldRule[priorityIndex] === newRule[priorityIndex]) { ast.policy[index] = newRule; - return true; + } else { + // this.removePolicy(sec, ptype, oldRule); + // this.addPolicy(sec, ptype, newRule); + throw new Error('new rule should have the same priority with old rule.'); } + } else { + ast.policy[index] = newRule; } - return false; + + return true; } // removePolicy removes a policy rule from the model. diff --git a/test/model.test.ts b/test/model.test.ts index fe1a4e1f..60af91af 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -287,6 +287,51 @@ test('TestPriorityModel', async () => { await testEnforce(e, 'bob', 'data2', 'write', false); }); +test('TestExplicitPriorityModel', async () => { + const e = await newEnforcer('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit.csv'); + + await testEnforce(e, 'alice', 'data1', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', true); + await testEnforce(e, 'data1_deny_group', 'data1', 'read', false); + await testEnforce(e, 'data1_deny_group', 'data1', 'write', false); + await testEnforce(e, 'data2_allow_group', 'data2', 'read', true); + await testEnforce(e, 'data2_allow_group', 'data2', 'write', true); +}); + +test('TestExplicitPriorityModelAddPolicy', async () => { + const e = await newEnforcer('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit.csv'); + + await e.addPolicy('1', 'bob', 'data2', 'write', 'deny'); + + await testEnforce(e, 'alice', 'data1', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', false); + await testEnforce(e, 'data1_deny_group', 'data1', 'read', false); + await testEnforce(e, 'data1_deny_group', 'data1', 'write', false); + await testEnforce(e, 'data2_allow_group', 'data2', 'read', true); + await testEnforce(e, 'data2_allow_group', 'data2', 'write', true); +}); + +test('TestExplicitPriorityModelUpdatePolicy', async () => { + const e = await newEnforcer('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit_update.csv'); + + await e.updatePolicy(['1', 'bob', 'data2', 'write', 'allow'], ['1', 'bob', 'data2', 'write', 'deny']); + + await testEnforce(e, 'alice', 'data1', 'write', true); + await testEnforce(e, 'alice', 'data1', 'read', true); + await testEnforce(e, 'bob', 'data2', 'read', false); + await testEnforce(e, 'bob', 'data2', 'write', false); + await testEnforce(e, 'data1_deny_group', 'data1', 'read', false); + await testEnforce(e, 'data1_deny_group', 'data1', 'write', false); + await testEnforce(e, 'data2_allow_group', 'data2', 'read', true); + await testEnforce(e, 'data2_allow_group', 'data2', 'write', true); + + await expect(e.updatePolicy(['1', 'bob', 'data2', 'write', 'allow'], ['2999', 'bob', 'data2', 'write', 'deny'])).resolves.toBe(false); +}); + test('TestPriorityModelIndeterminate', async () => { const e = await newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); From 92f8d05dba140e15d89829a31b8d7fe8d1d6d2f1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 23 Mar 2021 11:50:01 +0000 Subject: [PATCH 436/497] chore(release): 5.6.0 [skip ci] # [5.6.0](https://github.com/casbin/node-casbin/compare/v5.5.0...v5.6.0) (2021-03-23) ### Features * add priority_policy_explicit support ([#250](https://github.com/casbin/node-casbin/issues/250)) ([763c18e](https://github.com/casbin/node-casbin/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07d17bcc..0fb8d1d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.6.0](https://github.com/casbin/node-casbin/compare/v5.5.0...v5.6.0) (2021-03-23) + + +### Features + +* add priority_policy_explicit support ([#250](https://github.com/casbin/node-casbin/issues/250)) ([763c18e](https://github.com/casbin/node-casbin/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) + # [5.5.0](https://github.com/casbin/node-casbin/compare/v5.4.2...v5.5.0) (2021-03-19) diff --git a/package.json b/package.json index c98ed5cc..257066d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.5.0", + "version": "5.6.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 98c11f1451e71b0b002b140387f2a38bb9957c38 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Mon, 5 Apr 2021 17:12:34 +0800 Subject: [PATCH 437/497] fix: fix CasbinJsGetPermissionForUser() (#251) * fix: fix CasbinJsGetPermissionForUser() it has unexpected side affect, will change policies when it read from that Signed-off-by: Zxilly * test: enhance CasbinJsGetPermissionForUser() tests Signed-off-by: Zxilly * feat: add deepCopy function Signed-off-by: Zxilly * style: remove comment Signed-off-by: Zxilly * feat: add missing import Signed-off-by: Zxilly --- src/frontend.ts | 3 ++- src/util/util.ts | 12 ++++++++++++ test/frontend.test.ts | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/frontend.ts b/src/frontend.ts index 7798a08f..adc72d1d 100644 --- a/src/frontend.ts +++ b/src/frontend.ts @@ -13,6 +13,7 @@ // limitations under the License. import { Enforcer } from './enforcer'; +import { deepCopy } from './util'; /** * Experiment! @@ -41,7 +42,7 @@ export async function casbinJsGetPermissionForUser(e: Enforcer, user: string): P s += '[matchers]\n'; s += `m = ${m.get('m')?.get('m')?.value.replace(/_/g, '.')}`; obj['m'] = s; - obj['p'] = await e.getPolicy(); + obj['p'] = deepCopy(await e.getPolicy()); for (const arr of obj['p']) { arr.splice(0, 0, 'p'); } diff --git a/src/util/util.ts b/src/util/util.ts index 42c7380e..2d551491 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -159,6 +159,17 @@ async function generatorRunAsync(iterator: Generator): Promise { } } +function deepCopy(obj: Array | any): any { + if (typeof obj !== 'object') return; + const newObj: any = obj instanceof Array ? [] : {}; + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]; + } + } + return newObj; +} + export { escapeAssertion, removeComments, @@ -175,4 +186,5 @@ export { getEvalValue, generatorRunSync, generatorRunAsync, + deepCopy, }; diff --git a/test/frontend.test.ts b/test/frontend.test.ts index 54c82d01..3d2bc9a7 100644 --- a/test/frontend.test.ts +++ b/test/frontend.test.ts @@ -18,6 +18,11 @@ import { casbinJsGetPermissionForUser } from '../src/frontend'; test('TestCasbinJsGetPermissionForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const a = await casbinJsGetPermissionForUser(e, 'alice'); + const b = await casbinJsGetPermissionForUser(e, 'alice'); + if (a !== b) { + throw new Error('Unexpected side affect.'); + } const received = JSON.parse(await casbinJsGetPermissionForUser(e, 'alice')); const expectedModelStr = readFileSync('examples/rbac_model.conf').toString(); expect(received['m']).toBe(expectedModelStr.replace(/\n\n/g, '\n')); From b8d9c978e19300c2982a4fdcc313abbcf7aa891e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 5 Apr 2021 09:15:55 +0000 Subject: [PATCH 438/497] chore(release): 5.6.1 [skip ci] ## [5.6.1](https://github.com/casbin/node-casbin/compare/v5.6.0...v5.6.1) (2021-04-05) ### Bug Fixes * fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/node-casbin/issues/251)) ([98c11f1](https://github.com/casbin/node-casbin/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fb8d1d4..498d4570 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.6.1](https://github.com/casbin/node-casbin/compare/v5.6.0...v5.6.1) (2021-04-05) + + +### Bug Fixes + +* fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/node-casbin/issues/251)) ([98c11f1](https://github.com/casbin/node-casbin/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) + # [5.6.0](https://github.com/casbin/node-casbin/compare/v5.5.0...v5.6.0) (2021-03-23) diff --git a/package.json b/package.json index 257066d1..82f3d46c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.6.0", + "version": "5.6.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From eeee9b38d1be77205d9896211334e3f73cb0d57e Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sat, 10 Apr 2021 23:36:37 +0800 Subject: [PATCH 439/497] docs: change description of casbinJsGetPermissionForUser Signed-off-by: Zxilly --- src/frontend.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/frontend.ts b/src/frontend.ts index adc72d1d..ed754b7a 100644 --- a/src/frontend.ts +++ b/src/frontend.ts @@ -17,14 +17,12 @@ import { deepCopy } from './util'; /** * Experiment! - * getPermissionForCasbinJs returns a string describing the permission of a given user. + * getPermissionForCasbinJs returns a string include the whole model. * You can pass the returned string to the frontend and manage your webpage widgets and APIs with Casbin.js. - * The returned permission depends on `getImplicitPermissionsForUser`. - * In other words, getPermissionForCasbinJs will load all of the explicit and implicit permission (role's permission). * @param e the initialized enforcer * @param user the user */ -export async function casbinJsGetPermissionForUser(e: Enforcer, user: string): Promise { +export async function casbinJsGetPermissionForUser(e: Enforcer, user?: string): Promise { const obj: any = {}; const m = e.getModel().model; From fd45c686a25435a0571b37a5bb2f8a91510ee86a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Apr 2021 19:59:55 +0000 Subject: [PATCH 440/497] chore(deps): bump ssri from 6.0.1 to 6.0.2 Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/npm/ssri/releases) - [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) - [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) Signed-off-by: dependabot[bot] --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index d3438644..3b9610a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3304,8 +3304,8 @@ fb-watchman@^2.0.0: figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.2" - resolved "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz?cache=0&sync_timestamp=1585068742276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffiggy-pudding%2Fdownload%2Ffiggy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4= + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^1.7.0: version "1.7.0" @@ -7876,9 +7876,9 @@ sshpk@^1.7.0: tweetnacl "~0.14.0" ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg= + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" From 5d6ebabe21b68b7732d634765f52de344314610f Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sat, 1 May 2021 20:01:17 +0800 Subject: [PATCH 441/497] refactor: Remove the dependency on node-ip node-ip recursively imports os, with this patch node-casbin no longer includes dependencies on os Signed-off-by: Zxilly --- package.json | 2 - src/util/builtinOperators.ts | 2 +- src/util/ip.ts | 258 +++++++++++++++++++++++++++++++++++ yarn.lock | 9 +- 4 files changed, 260 insertions(+), 11 deletions(-) create mode 100644 src/util/ip.ts diff --git a/package.json b/package.json index 82f3d46c..0e5b85a1 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "@semantic-release/github": "^7.2.0", "@semantic-release/npm": "^7.0.10", "@semantic-release/release-notes-generator": "^9.0.2", - "@types/ip": "^0.0.31", "@types/jest": "^26.0.20", "@types/lodash": "^4.14.168", "@types/micromatch": "^4.0.1", @@ -54,7 +53,6 @@ "await-lock": "^2.0.1", "csv-parse": "^4.15.3", "expression-eval": "^2.0.0", - "ip": "^1.1.5", "micromatch": "^4.0.2" }, "files": [ diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 5c48c8b3..6a5c6ae7 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -13,7 +13,7 @@ // limitations under the License. import * as rbac from '../rbac'; -import * as ip from 'ip'; +import { ip } from './ip'; import { isMatch } from 'micromatch'; // regexMatch determines whether key1 matches the pattern of key2 in regular expression. diff --git a/src/util/ip.ts b/src/util/ip.ts new file mode 100644 index 00000000..b15dca00 --- /dev/null +++ b/src/util/ip.ts @@ -0,0 +1,258 @@ +// This is a minimal subset of node-ip for handling IPMatch +// https://github.com/indutny/node-ip/blob/master/lib/ip.js + +import { Buffer } from 'buffer'; + +const ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; +const ipv6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i; + +export const ip = { + toBuffer: function (ip: string, buff?: Buffer, offset?: number): Buffer { + offset = offset ? offset : 0; + + let result; + + if (this.isV4Format(ip)) { + result = buff || new Buffer(offset + 4); + ip.split(/\./g).map(function (byte) { + offset = offset ? offset : 0; + result[offset++] = parseInt(byte, 10) & 0xff; + }); + } else if (this.isV6Format(ip)) { + const sections = ip.split(':', 8); + + let i; + for (i = 0; i < sections.length; i++) { + const isv4 = this.isV4Format(sections[i]); + + let v4Buffer; + + if (isv4) { + v4Buffer = this.toBuffer(sections[i]); + sections[i] = v4Buffer.slice(0, 2).toString('hex'); + } + + if (v4Buffer && ++i < 8) { + sections.splice(i, 0, v4Buffer.slice(2, 4).toString('hex')); + } + } + + if (sections[0] === '') { + while (sections.length < 8) sections.unshift('0'); + } else if (sections[sections.length - 1] === '') { + while (sections.length < 8) sections.push('0'); + } else if (sections.length < 8) { + for (i = 0; i < sections.length && sections[i] !== ''; i++) {} + const argv = [i, 1]; + for (i = 9 - sections.length; i > 0; i--) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + argv.push('0'); + } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + // eslint-disable-next-line prefer-spread + sections.splice.apply(sections, argv); + } + + result = buff || new Buffer(offset + 16); + for (i = 0; i < sections.length; i++) { + const word = parseInt(sections[i], 16); + result[offset++] = (word >> 8) & 0xff; + result[offset++] = word & 0xff; + } + } + + if (!result) { + throw Error('Invalid ip address: ' + ip); + } + + return result; + }, + toString: function (buff: Buffer, offset?: number, length?: number): string { + offset = offset ? offset : 0; + length = length || buff.length - offset; + + let result = []; + if (length === 4) { + // IPv4 + for (let i = 0; i < length; i++) { + result.push(buff[offset + i]); + } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + result = result.join('.'); + } else if (length === 16) { + // IPv6 + for (let i = 0; i < length; i += 2) { + result.push(buff.readUInt16BE(offset + i).toString(16)); + } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + result = result.join(':'); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + result = (result as string).replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3'); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + result = (result as string).replace(/:{3,4}/, '::'); + } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + return result as string; + }, + isV4Format: function (ip: string): boolean { + return ipv4Regex.test(ip); + }, + + isV6Format: function (ip: string): boolean { + return ipv6Regex.test(ip); + }, + + fromPrefixLen: function (prefixlen: number, family?: string): string { + if (prefixlen > 32) { + family = 'ipv6'; + } else { + family = _normalizeFamily(typeof family === 'string' ? family : ''); + } + + let len = 4; + if (family === 'ipv6') { + len = 16; + } + const buff = new Buffer(len); + + for (let i = 0, n = buff.length; i < n; ++i) { + let bits = 8; + if (prefixlen < 8) { + bits = prefixlen; + } + prefixlen -= bits; + + buff[i] = ~(0xff >> bits) & 0xff; + } + + return ip.toString(buff); + }, + + mask: function (addr: string, mask: string): string { + const addrBuffer = ip.toBuffer(addr); + const maskBuffer = ip.toBuffer(mask); + + const result = new Buffer(Math.max(addrBuffer.length, maskBuffer.length)); + + let i; + // Same protocol - do bitwise and + if (addrBuffer.length === maskBuffer.length) { + for (i = 0; i < addrBuffer.length; i++) { + result[i] = addrBuffer[i] & maskBuffer[i]; + } + } else if (maskBuffer.length === 4) { + // IPv6 address and IPv4 mask + // (Mask low bits) + for (i = 0; i < maskBuffer.length; i++) { + result[i] = addrBuffer[addrBuffer.length - 4 + i] & maskBuffer[i]; + } + } else { + // IPv6 mask and IPv4 addr + for (let i = 0; i < result.length - 6; i++) { + result[i] = 0; + } + + // ::ffff:ipv4 + result[10] = 0xff; + result[11] = 0xff; + for (i = 0; i < addrBuffer.length; i++) { + result[i + 12] = addrBuffer[i] & maskBuffer[i + 12]; + } + i = i + 12; + } + for (; i < result.length; i++) result[i] = 0; + + return ip.toString(result); + }, + + subnet: function (addr: string, mask: string): any { + const networkAddress = ip.toLong(ip.mask(addr, mask)); + + // Calculate the mask's length. + const maskBuffer = ip.toBuffer(mask); + let maskLength = 0; + + for (let i = 0; i < maskBuffer.length; i++) { + if (maskBuffer[i] === 0xff) { + maskLength += 8; + } else { + let octet = maskBuffer[i] & 0xff; + while (octet) { + octet = (octet << 1) & 0xff; + maskLength++; + } + } + } + + return { + contains: function (other: string) { + return networkAddress === ip.toLong(ip.mask(other, mask)); + }, + }; + }, + cidrSubnet: function (cidrString: string): any { + const cidrParts = cidrString.split('/'); + + const addr = cidrParts[0]; + if (cidrParts.length !== 2) throw new Error('invalid CIDR subnet: ' + addr); + + const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); + + return ip.subnet(addr, mask); + }, + isEqual: function (a: string, b: string): boolean { + let aBuffer = ip.toBuffer(a); + let bBuffer = ip.toBuffer(b); + + // Same protocol + if (aBuffer.length === bBuffer.length) { + for (let i = 0; i < aBuffer.length; i++) { + if (aBuffer[i] !== bBuffer[i]) return false; + } + return true; + } + + // Swap + if (bBuffer.length === 4) { + const t = bBuffer; + bBuffer = aBuffer; + aBuffer = t; + } + + // a - IPv4, b - IPv6 + for (let i = 0; i < 10; i++) { + if (bBuffer[i] !== 0) return false; + } + + const word = bBuffer.readUInt16BE(10); + if (word !== 0 && word !== 0xffff) return false; + + for (let i = 0; i < 4; i++) { + if (aBuffer[i] !== bBuffer[i + 12]) return false; + } + + return true; + }, + toLong: function (ip: string): number { + let ipl = 0; + ip.split('.').forEach(function (octet) { + ipl <<= 8; + ipl += parseInt(octet); + }); + return ipl >>> 0; + }, + fromLong: function (ipl: number): string { + return (ipl >>> 24) + '.' + ((ipl >> 16) & 255) + '.' + ((ipl >> 8) & 255) + '.' + (ipl & 255); + }, +}; + +function _normalizeFamily(family: string): string { + return family ? family.toLowerCase() : 'ipv4'; +} diff --git a/yarn.lock b/yarn.lock index 3b9610a9..f942e257 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1067,13 +1067,6 @@ dependencies: "@types/node" "*" -"@types/ip@^0.0.31": - version "0.0.31" - resolved "https://registry.npm.taobao.org/@types/ip/download/@types/ip-0.0.31.tgz#a363989e72dd11bb21f932d6fe96bd6a85b2b74b" - integrity sha1-o2OYnnLdEbsh+TLW/pa9aoWyt0s= - dependencies: - "@types/node" "*" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -4204,7 +4197,7 @@ ip-regex@^2.1.0: resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@1.1.5, ip@^1.1.5: +ip@1.1.5: version "1.1.5" resolved "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= From b3a96a24dae2581d368eebd6ea0072204267464e Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 2 May 2021 13:57:40 +0800 Subject: [PATCH 442/497] build: transfer all package link to official Signed-off-by: Zxilly --- yarn.lock | 6008 ++++++++++++++++++++++------------------------------- 1 file changed, 2444 insertions(+), 3564 deletions(-) diff --git a/yarn.lock b/yarn.lock index f942e257..8e177104 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,113 +2,65 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11", "@babel/code-frame@^7.0.0": +"@babel/code-frame@7.12.11": version "7.12.11" - resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz?cache=0&sync_timestamp=1608075239039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8= + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha1-Fo2ho26Q2miujUnA8bSMfGJJITo= - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.12.13": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.13.8": - version "7.13.8" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" - integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== - -"@babel/core@^7.1.0": - version "7.11.6" - resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.6.tgz?cache=0&sync_timestamp=1599146828594&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" - integrity sha1-OpRV3HOH/xusRXcGULwTugShVlE= - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.6" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.5" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.5" - "@babel/types" "^7.11.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" +"@babel/compat-data@^7.13.15": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" + integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== -"@babel/core@^7.7.5": - version "7.13.10" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" - integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== +"@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz#47299ff3ec8d111b493f1a9d04bf88c04e728d88" + integrity sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-compilation-targets" "^7.13.10" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helpers" "^7.13.10" - "@babel/parser" "^7.13.10" + "@babel/generator" "^7.14.0" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.14.0" + "@babel/helpers" "^7.14.0" + "@babel/parser" "^7.14.0" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.19" semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": - version "7.11.6" - resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.11.6.tgz?cache=0&sync_timestamp=1599146830039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" - integrity sha1-uGiQD4GxY7TUZOokVFxhy6xNxiA= - dependencies: - "@babel/types" "^7.11.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": - version "7.13.9" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== +"@babel/generator@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz#0f35d663506c43e4f10898fbda0d752ec75494be" + integrity sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.14.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-compilation-targets@^7.13.10": - version "7.13.10" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" - integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== +"@babel/helper-compilation-targets@^7.13.16": + version "7.13.16" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== dependencies: - "@babel/compat-data" "^7.13.8" + "@babel/compat-data" "^7.13.15" "@babel/helper-validator-option" "^7.12.17" browserslist "^4.14.5" semver "^6.3.0" -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo= - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - "@babel/helper-function-name@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" @@ -118,13 +70,6 @@ "@babel/template" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593522827189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I= - dependencies: - "@babel/types" "^7.10.4" - "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" @@ -132,68 +77,33 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-member-expression-to-functions@^7.10.4": - version "7.11.0" - resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.11.0.tgz?cache=0&sync_timestamp=1596144651395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha1-rmnIPYTugvS0L5bioJQQk1qPJt8= - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-member-expression-to-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" - integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha1-TFxUvgS9MWcKc4J5fXW5+i5bViA= +"@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.13.12" -"@babel/helper-module-imports@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" - integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== +"@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.11.0.tgz?cache=0&sync_timestamp=1596142927697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha1-sW8lAinkchGr3YSzS2RzfCqy01k= - 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.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" - lodash "^4.17.19" + "@babel/types" "^7.13.12" -"@babel/helper-module-transforms@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" - integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== +"@babel/helper-module-transforms@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz#8fcf78be220156f22633ee204ea81f73f826a8ad" + integrity sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.14.0" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522827576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha1-UNyWQT1ZT5lad5BZBbBYk813lnM= - dependencies: - "@babel/types" "^7.10.4" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" @@ -202,57 +112,27 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521148758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha1-L3WoMSadT2d95JmG3/WZJ1M883U= - -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0": version "7.13.0" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha1-1YXNk4jqBuYDHkzUS2cTy+rZ5s8= - 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-replace-supers@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" - integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== +"@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-member-expression-to-functions" "^7.13.12" "@babel/helper-optimise-call-expression" "^7.12.13" "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha1-D1zNopRSd6KnotOoIeFTle3PNGE= - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" - integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== - dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" -"@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz?cache=0&sync_timestamp=1596142927868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha1-+KSRJErPamdhWKxCBykRuoOtCZ8= +"@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.13.12" "@babel/helper-split-export-declaration@^7.12.13": version "7.12.13" @@ -261,61 +141,38 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.12.11.tgz?cache=0&sync_timestamp=1608075248751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha1-yaHwIZF9y1zPDU5FPjmQIpgfye0= +"@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha1-Kr6w1yGv98Cpc3a54fb2XXpHUEQ= - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.13.10": - version "7.13.10" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" - integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== +"@babel/helpers@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" + integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== dependencies: "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593522818552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha1-fRvf1ldTU4+r5sOFls23bZrGAUM= - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" + integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.14.0" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": - version "7.11.5" - resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha1-x/9jA99xCA7HpPW4wAPFjxz1EDc= - -"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": - version "7.13.10" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409" - integrity sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz#2f0ebfed92bcddcc8395b91f1895191ce2760380" + integrity sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -402,21 +259,12 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/runtime@^7.0.0": - version "7.11.2" - resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.2.tgz?cache=0&sync_timestamp=1596637824771&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha1-9UnBPHVMxAuHZEufqfCaapX+BzY= + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" + integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha1-MlGZbEIA68cdGo/EBfupQPNrong= - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - "@babel/template@^7.12.13", "@babel/template@^7.3.3": version "7.12.13" resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" @@ -426,52 +274,26 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": - version "7.11.5" - resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha1-vnd7k7UY62127i4eodFD2qEeYcM= - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/traverse@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" - integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz#cea0dc8ae7e2b1dec65f512f39f3483e8cc95aef" + integrity sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.0" + "@babel/generator" "^7.14.0" "@babel/helper-function-name" "^7.12.13" "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/parser" "^7.14.0" + "@babel/types" "^7.14.0" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0": - version "7.11.5" - resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha1-2d5XfQElLXfGgAzuA57mT691Zi0= +"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz#3fc3fc74e0cdad878182e5f66cc6bcab1915a802" + integrity sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.3.3": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" - integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" + "@babel/helper-validator-identifier" "^7.14.0" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -481,44 +303,46 @@ "@cnakazawa/watch@^1.0.3": version "1.0.4" - resolved "https://registry.npm.taobao.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha1-+GSuhQBND8q29QvpFBxNo2jRZWo= + resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" -"@commitlint/execute-rule@^11.0.0": - version "11.0.0" - resolved "https://registry.npm.taobao.org/@commitlint/execute-rule/download/@commitlint/execute-rule-11.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40commitlint%2Fexecute-rule%2Fdownload%2F%40commitlint%2Fexecute-rule-11.0.0.tgz#3ed60ab7a33019e58d90e2d891b75d7df77b4b4d" - integrity sha1-PtYKt6MwGeWNkOLYkbddffd7S00= +"@commitlint/execute-rule@^12.1.1": + version "12.1.1" + resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-12.1.1.tgz#8aad1d46fb78b3199e4ae36debdc93570bf765ea" + integrity sha512-6mplMGvLCKF5LieL7BRhydpg32tm6LICnWQADrWU4S5g9PKi2utNvhiaiuNPoHUXr29RdbNaGNcyyPv8DSjJsQ== "@commitlint/load@>6.1.1": - version "11.0.0" - resolved "https://registry.npm.taobao.org/@commitlint/load/download/@commitlint/load-11.0.0.tgz?cache=0&sync_timestamp=1599988541031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40commitlint%2Fload%2Fdownload%2F%40commitlint%2Fload-11.0.0.tgz#f736562f0ffa7e773f8808fea93319042ee18211" - integrity sha1-9zZWLw/6fnc/iAj+qTMZBC7hghE= - dependencies: - "@commitlint/execute-rule" "^11.0.0" - "@commitlint/resolve-extends" "^11.0.0" - "@commitlint/types" "^11.0.0" - chalk "4.1.0" + version "12.1.1" + resolved "https://registry.npmjs.org/@commitlint/load/-/load-12.1.1.tgz#5a7fb8be11e520931d1237c5e8dc401b7cc9c6c1" + integrity sha512-qOQtgNdJRULUQWP9jkpTwhj7aEtnqUtqeUpbQ9rjS+GIUST65HZbteNUX4S0mAEGPWqy2aK5xGd73cUfFSvuuw== + dependencies: + "@commitlint/execute-rule" "^12.1.1" + "@commitlint/resolve-extends" "^12.1.1" + "@commitlint/types" "^12.1.1" + chalk "^4.0.0" cosmiconfig "^7.0.0" lodash "^4.17.19" resolve-from "^5.0.0" -"@commitlint/resolve-extends@^11.0.0": - version "11.0.0" - resolved "https://registry.npm.taobao.org/@commitlint/resolve-extends/download/@commitlint/resolve-extends-11.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40commitlint%2Fresolve-extends%2Fdownload%2F%40commitlint%2Fresolve-extends-11.0.0.tgz#158ecbe27d4a2a51d426111a01478e216fbb1036" - integrity sha1-FY7L4n1KKlHUJhEaAUeOIW+7EDY= +"@commitlint/resolve-extends@^12.1.1": + version "12.1.1" + resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-12.1.1.tgz#80a78b0940775d17888dd2985b52f93d93e0a885" + integrity sha512-/DXRt0S0U3o9lq5cc8OL1Lkx0IjW0HcDWjUkUXshAajBIKBYSJB8x/loNCi1krNEJ8SwLXUEFt5OLxNO6wE9yQ== dependencies: import-fresh "^3.0.0" lodash "^4.17.19" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/types@^11.0.0": - version "11.0.0" - resolved "https://registry.npm.taobao.org/@commitlint/types/download/@commitlint/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe" - integrity sha1-cZzwX8wau2UzYQouD13R5h6sFP4= +"@commitlint/types@^12.1.1": + version "12.1.1" + resolved "https://registry.npmjs.org/@commitlint/types/-/types-12.1.1.tgz#8e651f6af0171cd4f8d464c6c37a7cf63ee071bd" + integrity sha512-+qGH+s2Lo6qwacV2X3/ZypZwaAI84ift+1HBjXdXtI/q0F5NtmXucV3lcQOTviMTNiJhq4qWON2fjci2NItASw== + dependencies: + chalk "^4.0.0" "@eslint/eslintrc@^0.4.0": version "0.4.0" @@ -535,15 +359,6 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@iarna/cli@^1.2.0": - version "1.2.0" - resolved "https://registry.npm.taobao.org/@iarna/cli/download/@iarna/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" - integrity sha1-D3r16FGv6JUQRYPEygc3eoCU1kE= - dependencies: - signal-exit "^3.0.2" - update-notifier "^2.2.0" - yargs "^8.0.2" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -733,139 +548,270 @@ "@nodelib/fs.scandir@2.1.4": version "2.1.4" - resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.4.tgz?cache=0&sync_timestamp=1609074440839&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha1-1LNUml213iaD4MEHGrTxQJBLv2k= + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": version "2.0.4" - resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha1-o/LdYbq0O424+hCKEhz//kxnZlU= + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== "@nodelib/fs.walk@^1.2.3": version "1.2.6" - resolved "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.6.tgz?cache=0&sync_timestamp=1609077069715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha1-zOk5azCqWv6eN1Zgj1gxrctT0GM= + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" +"@npmcli/arborist@^2.0.0", "@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.4.1.tgz#e98c77f7e17924876b89907237516eb65d46005f" + integrity sha512-LivXfK+LjtvzFjnwK6E41Pkw1C8+MYrgdXinzqpDc8MDYp7gMT0nvGvnpQd47OV2GhLRyBkbUSEcLk6P1d1s0g== + dependencies: + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/map-workspaces" "^1.0.2" + "@npmcli/metavuln-calculator" "^1.1.0" + "@npmcli/move-file" "^1.1.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^1.0.1" + "@npmcli/run-script" "^1.8.2" + bin-links "^2.2.1" + cacache "^15.0.3" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.2" + mkdirp-infer-owner "^2.0.0" + npm-install-checks "^4.0.0" + npm-package-arg "^8.1.0" + npm-pick-manifest "^6.1.0" + npm-registry-fetch "^10.0.0" + pacote "^11.2.6" + parse-conflict-json "^1.1.1" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + semver "^7.3.5" + tar "^6.1.0" + treeverse "^1.0.4" + walk-up-path "^1.0.0" + +"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" + integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== + +"@npmcli/config@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@npmcli/config/-/config-2.2.0.tgz#c3f6cb76e74691d1ae746cda482b7df751ed2124" + integrity sha512-y0V3F7RCWXy8kBOvKvKSRUNKRobLB6vL/UNchy/6+IUNIqu+UyrY3Z7jvj1ZA/AkYc/0WkCUtppCo+bPhMU8Aw== + dependencies: + ini "^2.0.0" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + semver "^7.3.4" + walk-up-path "^1.0.0" + +"@npmcli/disparity-colors@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-1.0.1.tgz#b23c864c9658f9f0318d5aa6d17986619989535c" + integrity sha512-kQ1aCTTU45mPXN+pdAaRxlxr3OunkyztjbbxDY/aIcPS5CnCUrx+1+NvA6pTcYR7wmLZe37+Mi5v3nfbwPxq3A== + dependencies: + ansi-styles "^4.3.0" + +"@npmcli/git@^2.0.1", "@npmcli/git@^2.0.7": + version "2.0.8" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-2.0.8.tgz#c38b54cdeec556ab641cf6161cc7825711a88d65" + integrity sha512-LPnzyBZ+1p7+JzHVwwKycMF8M3lr1ze3wxGRnxn/QxJtk++Y3prSJQrdBDGCxJyRpFsup6J3lrRBVYBhJVrM8Q== + dependencies: + "@npmcli/promise-spawn" "^1.3.2" + lru-cache "^6.0.0" + mkdirp "^1.0.4" + npm-pick-manifest "^6.1.1" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.6", "@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.3.tgz#6072a0794762cf8f572e6080fa66d1bbefa991d5" + integrity sha512-SdlRlOoQw4WKD4vtb/n5gUkobEABYBEOo8fRE4L8CtBkyWDSvIrReTfKvQ/Jc/LQqDaaZ5iv1iMSQzKCUr1n1A== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^7.1.6" + minimatch "^3.0.4" + read-package-json-fast "^2.0.1" + +"@npmcli/metavuln-calculator@^1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" + integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== + dependencies: + cacache "^15.0.5" + pacote "^11.1.11" + semver "^7.3.2" + +"@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^1.0.1", "@npmcli/node-gyp@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" + integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== + +"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz#f250a0c5e1a08a792d775a315d0ff42fc3a51e1d" + integrity sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A== + dependencies: + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + infer-owner "^1.0.4" + node-gyp "^7.1.0" + read-package-json-fast "^2.0.1" + "@octokit/auth-token@^2.4.4": - version "2.4.4" - resolved "https://registry.npm.taobao.org/@octokit/auth-token/download/@octokit/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" - integrity sha1-7jHGmwHQN4wS/T/+QGAw89lNO1Y= + version "2.4.5" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" + integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== dependencies: - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" "@octokit/core@^3.2.3": - version "3.2.4" - resolved "https://registry.npm.taobao.org/@octokit/core/download/@octokit/core-3.2.4.tgz#5791256057a962eca972e31818f02454897fd106" - integrity sha1-V5ElYFepYuypcuMYGPAkVIl/0QY= + version "3.4.0" + resolved "https://registry.npmjs.org/@octokit/core/-/core-3.4.0.tgz#b48aa27d755b339fe7550548b340dcc2b513b742" + integrity sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg== dependencies: "@octokit/auth-token" "^2.4.4" "@octokit/graphql" "^4.5.8" "@octokit/request" "^5.4.12" + "@octokit/request-error" "^2.0.5" "@octokit/types" "^6.0.3" - before-after-hook "^2.1.0" + before-after-hook "^2.2.0" universal-user-agent "^6.0.0" "@octokit/endpoint@^6.0.1": - version "6.0.10" - resolved "https://registry.npm.taobao.org/@octokit/endpoint/download/@octokit/endpoint-6.0.10.tgz#741ce1fa2f4fb77ce8ebe0c6eaf5ce63f565f8e8" - integrity sha1-dBzh+i9Pt3zo6+DG6vXOY/Vl+Og= + version "6.0.11" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1" + integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ== dependencies: - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" "@octokit/graphql@^4.5.8": - version "4.5.8" - resolved "https://registry.npm.taobao.org/@octokit/graphql/download/@octokit/graphql-4.5.8.tgz#d42373633c3015d0eafce64a8ce196be167fdd9b" - integrity sha1-1CNzYzwwFdDq/OZKjOGWvhZ/3Zs= + version "4.6.1" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.1.tgz#f975486a46c94b7dbe58a0ca751935edc7e32cc9" + integrity sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA== dependencies: "@octokit/request" "^5.3.0" - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^2.2.0": - version "2.2.0" - resolved "https://registry.npm.taobao.org/@octokit/openapi-types/download/@octokit/openapi-types-2.2.0.tgz#123e0438a0bc718ccdac3b5a2e69b3dd00daa85b" - integrity sha1-Ej4EOKC8cYzNrDtaLmmz3QDaqFs= +"@octokit/openapi-types@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.0.0.tgz#0f6992db9854af15eca77d71ab0ec7fad2f20411" + integrity sha512-gV/8DJhAL/04zjTI95a7FhQwS6jlEE0W/7xeYAzuArD0KVAVWDLP2f3vi98hs3HLTczxXdRK/mF0tRoQPpolEw== "@octokit/plugin-paginate-rest@^2.6.2": - version "2.7.0" - resolved "https://registry.npm.taobao.org/@octokit/plugin-paginate-rest/download/@octokit/plugin-paginate-rest-2.7.0.tgz#6bb7b043c246e0654119a6ec4e72a172c9e2c7f3" - integrity sha1-a7ewQ8JG4GVBGabsTnKhcsnix/M= + version "2.13.3" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.3.tgz#f0f1792230805108762d87906fb02d573b9e070a" + integrity sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg== dependencies: - "@octokit/types" "^6.0.1" + "@octokit/types" "^6.11.0" "@octokit/plugin-request-log@^1.0.2": - version "1.0.2" - resolved "https://registry.npm.taobao.org/@octokit/plugin-request-log/download/@octokit/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" - integrity sha1-OU1Z7HNM0vEiQx+68FCZhh7OPEQ= + version "1.0.3" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" + integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== -"@octokit/plugin-rest-endpoint-methods@4.4.1": - version "4.4.1" - resolved "https://registry.npm.taobao.org/@octokit/plugin-rest-endpoint-methods/download/@octokit/plugin-rest-endpoint-methods-4.4.1.tgz#105cf93255432155de078c9efc33bd4e14d1cd63" - integrity sha1-EFz5MlVDIVXeB4ye/DO9ThTRzWM= +"@octokit/plugin-rest-endpoint-methods@5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.1.tgz#631b8d4edc6798b03489911252a25f2a4e58c594" + integrity sha512-vvWbPtPqLyIzJ7A4IPdTl+8IeuKAwMJ4LjvmqWOOdfSuqWQYZXq2CEd0hsnkidff2YfKlguzujHs/reBdAx8Sg== dependencies: - "@octokit/types" "^6.1.0" + "@octokit/types" "^6.13.1" deprecation "^2.3.1" -"@octokit/request-error@^2.0.0": - version "2.0.4" - resolved "https://registry.npm.taobao.org/@octokit/request-error/download/@octokit/request-error-2.0.4.tgz#07dd5c0521d2ee975201274c472a127917741262" - integrity sha1-B91cBSHS7pdSASdMRyoSeRd0EmI= +"@octokit/request-error@^2.0.0", "@octokit/request-error@^2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143" + integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg== dependencies: - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" deprecation "^2.0.0" once "^1.4.0" "@octokit/request@^5.3.0", "@octokit/request@^5.4.12": - version "5.4.12" - resolved "https://registry.npm.taobao.org/@octokit/request/download/@octokit/request-5.4.12.tgz#b04826fa934670c56b135a81447be2c1723a2ffc" - integrity sha1-sEgm+pNGcMVrE1qBRHviwXI6L/w= + version "5.4.15" + resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.15.tgz#829da413dc7dd3aa5e2cdbb1c7d0ebe1f146a128" + integrity sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" + "@octokit/types" "^6.7.1" is-plain-object "^5.0.0" node-fetch "^2.6.1" - once "^1.4.0" universal-user-agent "^6.0.0" "@octokit/rest@^18.0.0": - version "18.0.12" - resolved "https://registry.npm.taobao.org/@octokit/rest/download/@octokit/rest-18.0.12.tgz#278bd41358c56d87c201e787e8adc0cac132503a" - integrity sha1-J4vUE1jFbYfCAeeH6K3AysEyUDo= + version "18.5.3" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.5.3.tgz#6a2e6006a87ebbc34079c419258dd29ec9ff659d" + integrity sha512-KPAsUCr1DOdLVbZJgGNuE/QVLWEaVBpFQwDAz/2Cnya6uW2wJ/P5RVGk0itx7yyN1aGa8uXm2pri4umEqG1JBA== dependencies: "@octokit/core" "^3.2.3" "@octokit/plugin-paginate-rest" "^2.6.2" "@octokit/plugin-request-log" "^1.0.2" - "@octokit/plugin-rest-endpoint-methods" "4.4.1" + "@octokit/plugin-rest-endpoint-methods" "5.0.1" -"@octokit/types@^6.0.0", "@octokit/types@^6.0.1", "@octokit/types@^6.0.3", "@octokit/types@^6.1.0": - version "6.2.1" - resolved "https://registry.npm.taobao.org/@octokit/types/download/@octokit/types-6.2.1.tgz#7f881fe44475ab1825776a4a59ca1ae082ed1043" - integrity sha1-f4gf5ER1qxgld2pKWcoa4ILtEEM= +"@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.13.1", "@octokit/types@^6.7.1": + version "6.14.2" + resolved "https://registry.npmjs.org/@octokit/types/-/types-6.14.2.tgz#64c9457f38fb8522bdbba3c8cc814590a2d61bf5" + integrity sha512-wiQtW9ZSy4OvgQ09iQOdyXYNN60GqjCL/UdMsepDr1Gr0QzpW6irIKbH3REuAHXAhxkEk9/F2a3Gcs1P6kW5jA== dependencies: - "@octokit/openapi-types" "^2.2.0" - "@types/node" ">= 8" + "@octokit/openapi-types" "^7.0.0" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" - resolved "https://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha1-ohEXsZ7pvnDDeewYd1N+8uHGMwE= + resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== dependencies: any-observable "^0.3.0" "@semantic-release/changelog@^5.0.1": version "5.0.1" - resolved "https://registry.npm.taobao.org/@semantic-release/changelog/download/@semantic-release/changelog-5.0.1.tgz#50a84b63e5d391b7debfe021421589fa2bcdafe4" - integrity sha1-UKhLY+XTkbfev+AhQhWJ+ivNr+Q= + resolved "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-5.0.1.tgz#50a84b63e5d391b7debfe021421589fa2bcdafe4" + integrity sha512-unvqHo5jk4dvAf2nZ3aw4imrlwQ2I50eVVvq9D47Qc3R+keNqepx1vDYwkjF8guFXnOYaYcR28yrZWno1hFbiw== dependencies: "@semantic-release/error" "^2.1.0" aggregate-error "^3.0.0" @@ -874,8 +820,8 @@ "@semantic-release/commit-analyzer@^8.0.0", "@semantic-release/commit-analyzer@^8.0.1": version "8.0.1" - resolved "https://registry.npm.taobao.org/@semantic-release/commit-analyzer/download/@semantic-release/commit-analyzer-8.0.1.tgz#5d2a37cd5a3312da0e3ac05b1ca348bf60b90bca" - integrity sha1-XSo3zVozEtoOOsBbHKNIv2C5C8o= + resolved "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz#5d2a37cd5a3312da0e3ac05b1ca348bf60b90bca" + integrity sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A== dependencies: conventional-changelog-angular "^5.0.0" conventional-commits-filter "^2.0.0" @@ -887,13 +833,13 @@ "@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": version "2.2.0" - resolved "https://registry.npm.taobao.org/@semantic-release/error/download/@semantic-release/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" - integrity sha1-7p1aCcmWnq3h7IZHdq7aXFzdu/A= + resolved "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" + integrity sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg== "@semantic-release/git@^9.0.0": version "9.0.0" - resolved "https://registry.npm.taobao.org/@semantic-release/git/download/@semantic-release/git-9.0.0.tgz#304c4883c87d095b1faaae93300f1f1e0466e9a5" - integrity sha1-MExIg8h9CVsfqq6TMA8fHgRm6aU= + resolved "https://registry.npmjs.org/@semantic-release/git/-/git-9.0.0.tgz#304c4883c87d095b1faaae93300f1f1e0466e9a5" + integrity sha512-AZ4Zha5NAPAciIJH3ipzw/WU9qLAn8ENaoVAhD6srRPxTpTzuV3NhNh14rcAo8Paj9dO+5u4rTKcpetOBluYVw== dependencies: "@semantic-release/error" "^2.1.0" aggregate-error "^3.0.0" @@ -905,9 +851,9 @@ p-reduce "^2.0.0" "@semantic-release/github@^7.0.0", "@semantic-release/github@^7.2.0": - version "7.2.0" - resolved "https://registry.npm.taobao.org/@semantic-release/github/download/@semantic-release/github-7.2.0.tgz#925f3efd91adabfc4bbe0de24b79fe1a8a38b4e2" - integrity sha1-kl8+/ZGtq/xLvg3iS3n+Goo4tOI= + version "7.2.1" + resolved "https://registry.npmjs.org/@semantic-release/github/-/github-7.2.1.tgz#e833245746413e0830b65112331ca0a00b35cf95" + integrity sha512-+gOhbaG4T3xJb6aTZu1/7KvCmYKRChkasdIyFWdaGaTWVeGpdl4o0zMviV1z3kRcgPOSXeqjHSQ6SOQAfHQiDw== dependencies: "@octokit/rest" "^18.0.0" "@semantic-release/error" "^2.2.0" @@ -926,29 +872,10 @@ p-retry "^4.0.0" url-join "^4.0.0" -"@semantic-release/npm@^7.0.0": - version "7.0.9" - resolved "https://registry.npm.taobao.org/@semantic-release/npm/download/@semantic-release/npm-7.0.9.tgz#a49d80d0f96a52cd70f9ce4e78fac5be70f24844" - integrity sha1-pJ2A0PlqUs1w+c5OePrFvnDySEQ= - dependencies: - "@semantic-release/error" "^2.2.0" - aggregate-error "^3.0.0" - execa "^5.0.0" - fs-extra "^9.0.0" - lodash "^4.17.15" - nerf-dart "^1.0.0" - normalize-url "^5.0.0" - npm "^6.14.8" - rc "^1.2.8" - read-pkg "^5.0.0" - registry-auth-token "^4.0.0" - semver "^7.1.2" - tempy "^1.0.0" - -"@semantic-release/npm@^7.0.10": - version "7.0.10" - resolved "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.0.10.tgz#85e5b201e71896ecc3f45d7a496f5485f97df0b8" - integrity sha512-DXFEhgSt5u22imTWbw8wfcVGB90nFJNcjUBtJI3zswJojzZ7yXpY4i2Va5RBRQRTtj00BfG0stbilAtKrKp35g== +"@semantic-release/npm@^7.0.0", "@semantic-release/npm@^7.0.10": + version "7.1.1" + resolved "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.1.1.tgz#90a0970f12b963fa846e5cdf896e6c7d996c1a64" + integrity sha512-zTYAno1j49XiH+uAVCY47dKOJAagA/MaJb26FFIfNujNHw3GYXk3ygsFa5CSa55xsO0qEMLcsDX3f3ByCg6nZw== dependencies: "@semantic-release/error" "^2.2.0" aggregate-error "^3.0.0" @@ -956,31 +883,15 @@ fs-extra "^9.0.0" lodash "^4.17.15" nerf-dart "^1.0.0" - normalize-url "^5.0.0" - npm "^6.14.9" + normalize-url "^6.0.0" + npm "^7.0.0" rc "^1.2.8" read-pkg "^5.0.0" registry-auth-token "^4.0.0" semver "^7.1.2" tempy "^1.0.0" -"@semantic-release/release-notes-generator@^9.0.0": - version "9.0.1" - resolved "https://registry.npm.taobao.org/@semantic-release/release-notes-generator/download/@semantic-release/release-notes-generator-9.0.1.tgz#732d285d103064f2a64f08a32031551ebb4f918b" - integrity sha1-cy0oXRAwZPKmTwijIDFVHrtPkYs= - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-changelog-writer "^4.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.0.0" - debug "^4.0.0" - get-stream "^5.0.0" - import-from "^3.0.0" - into-stream "^5.0.0" - lodash "^4.17.4" - read-pkg-up "^7.0.0" - -"@semantic-release/release-notes-generator@^9.0.2": +"@semantic-release/release-notes-generator@^9.0.0", "@semantic-release/release-notes-generator@^9.0.2": version "9.0.2" resolved "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.2.tgz#a00da9f984b6d42d16e037ecd529f58665cde938" integrity sha512-xGFSidhGqB27uwgWCU6y0gbf4r/no5flOAkJyFFc4+bPf8S+LfAVm7xhhlK5VPXLt2Iu1RBH8F+IgMK2ah5YpA== @@ -997,9 +908,9 @@ read-pkg-up "^7.0.0" "@sinonjs/commons@^1.7.0": - version "1.8.2" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" - integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + version "1.8.3" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" @@ -1012,13 +923,13 @@ "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.npm.taobao.org/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha1-zLkURTYBeaBOf+av94wA/8Hur4I= + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + version "7.1.14" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1028,37 +939,30 @@ "@types/babel__generator@*": version "7.6.2" - resolved "https://registry.npm.taobao.org/@types/babel__generator/download/@types/babel__generator-7.6.2.tgz?cache=0&sync_timestamp=1601076676593&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__generator%2Fdownload%2F%40types%2Fbabel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha1-89cReOGHhY98ReMDgPjxt0FaEtg= + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.3" - resolved "https://registry.npm.taobao.org/@types/babel__template/download/@types/babel__template-7.0.3.tgz#b8aaeba0a45caca7b56a5de9459872dde3727214" - integrity sha1-uKrroKRcrKe1al3pRZhy3eNychQ= + version "7.4.0" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.15" - resolved "https://registry.npm.taobao.org/@types/babel__traverse/download/@types/babel__traverse-7.0.15.tgz?cache=0&sync_timestamp=1601076676740&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__traverse%2Fdownload%2F%40types%2Fbabel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" - integrity sha1-255COJMetp74qrCtZSPU1MqjnQM= - dependencies: - "@babel/types" "^7.3.0" - -"@types/babel__traverse@^7.0.4": - version "7.11.0" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.11.1" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" + integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== dependencies: "@babel/types" "^7.3.0" "@types/braces@*": version "3.0.0" - resolved "https://registry.npm.taobao.org/@types/braces/download/@types/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" - integrity sha1-faHA1E/xx+tmCjbsB46mG6frQss= + resolved "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" + integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== "@types/graceful-fs@^4.1.2": version "4.1.5" @@ -1069,13 +973,13 @@ "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" - resolved "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha1-S6jdtyAiH0MuRDvV+RF/0iz9R2I= + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== "@types/istanbul-lib-report@*": version "3.0.0" - resolved "https://registry.npm.taobao.org/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY= + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" @@ -1087,17 +991,17 @@ "@types/istanbul-lib-report" "*" "@types/jest@^26.0.20": - version "26.0.20" - resolved "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" - integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== + version "26.0.23" + resolved "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" + integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" "@types/json-schema@^7.0.3": - version "7.0.6" - resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA= + version "7.0.7" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== "@types/lodash@^4.14.168": version "4.14.168" @@ -1106,55 +1010,50 @@ "@types/micromatch@^4.0.1": version "4.0.1" - resolved "https://registry.npm.taobao.org/@types/micromatch/download/@types/micromatch-4.0.1.tgz?cache=0&sync_timestamp=1596841637355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fmicromatch%2Fdownload%2F%40types%2Fmicromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" - integrity sha1-k4FEndZZ/Dgj/SpBkM6syYUIO8c= + resolved "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" + integrity sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw== dependencies: "@types/braces" "*" "@types/minimatch@^3.0.3": - version "3.0.3" - resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&sync_timestamp=1596839015387&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0= + version "3.0.4" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== "@types/minimist@^1.2.0": version "1.2.1" - resolved "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" - integrity sha1-KD9mn/dte4Jg34q3pCYsyD2YglY= + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*": - version "14.11.5" - resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-14.11.5.tgz?cache=0&sync_timestamp=1601963426754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.11.5.tgz#fecad41c041cae7f2404ad4b2d0742fdb628b305" - integrity sha1-/srUHAQcrn8kBK1LLQdC/bYoswU= - -"@types/node@>= 8": - version "14.14.20" - resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" - integrity sha1-95dIY+3SHR+KSUpz6OKzZYYVw0A= + version "15.0.1" + resolved "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" + integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== "@types/node@^10.5.3": - version "10.17.37" - resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.37.tgz?cache=0&sync_timestamp=1601963426754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.37.tgz#40d03db879993799c3819e298b003f055e8ecafe" - integrity sha1-QNA9uHmZN5nDgZ4piwA/BV6Oyv4= + version "10.17.59" + resolved "https://registry.npmjs.org/@types/node/-/node-10.17.59.tgz#03f440ccf746a27f7da6e141e6cbae64681dbd2f" + integrity sha512-7Uc8IRrL8yZz5ti45RaFxpbU8TxlzdC3HvxV+hOWo1EyLsuKv/w7y0n+TwZzwL3vdx3oZ2k3ubxPq131hNtXyg== "@types/normalize-package-data@^2.4.0": version "2.4.0" - resolved "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4= + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1605055243639&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.0.0": - version "2.2.2" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.2.tgz#e2280c89ddcbeef340099d6968d8c86ba155fdf6" - integrity sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg== + version "2.2.3" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== "@types/retry@^0.12.0": version "0.12.0" - resolved "https://registry.npm.taobao.org/@types/retry/download/@types/retry-0.12.0.tgz?cache=0&sync_timestamp=1605057731420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fretry%2Fdownload%2F%40types%2Fretry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha1-KzXsz87n04zXKtmSMvvVi/+zyE0= + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/stack-utils@^2.0.0": version "2.0.0" @@ -1162,9 +1061,9 @@ integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== "@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz?cache=0&sync_timestamp=1596842545661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha1-yz+fdBhp4gzOMw/765JxWQSDiC0= + version "20.2.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== "@types/yargs@^15.0.0": version "15.0.13" @@ -1174,12 +1073,12 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.17.0.tgz#6f856eca4e6a52ce9cf127dfd349096ad936aa2d" - integrity sha512-/fKFDcoHg8oNan39IKFOb5WmV7oWhQe1K6CDaAVfJaNWEhmfqlA24g+u1lqU5bMH7zuNasfMId4LaYWC5ijRLw== + version "4.22.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz#3d5f29bb59e61a9dba1513d491b059e536e16dbc" + integrity sha512-U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA== dependencies: - "@typescript-eslint/experimental-utils" "4.17.0" - "@typescript-eslint/scope-manager" "4.17.0" + "@typescript-eslint/experimental-utils" "4.22.0" + "@typescript-eslint/scope-manager" "4.22.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1187,66 +1086,66 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.17.0.tgz#762c44aaa1a6a3c05b6d63a8648fb89b89f84c80" - integrity sha512-ZR2NIUbnIBj+LGqCFGQ9yk2EBQrpVVFOh9/Kd0Lm6gLpSAcCuLLe5lUCibKGCqyH9HPwYC0GIJce2O1i8VYmWA== +"@typescript-eslint/experimental-utils@4.22.0": + version "4.22.0" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz#68765167cca531178e7b650a53456e6e0bef3b1f" + integrity sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.17.0" - "@typescript-eslint/types" "4.17.0" - "@typescript-eslint/typescript-estree" "4.17.0" + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.17.0.tgz#141b647ffc72ebebcbf9b0fe6087f65b706d3215" - integrity sha512-KYdksiZQ0N1t+6qpnl6JeK9ycCFprS9xBAiIrw4gSphqONt8wydBw4BXJi3C11ywZmyHulvMaLjWsxDjUSDwAw== + version "4.22.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.0.tgz#e1637327fcf796c641fe55f73530e90b16ac8fe8" + integrity sha512-z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q== dependencies: - "@typescript-eslint/scope-manager" "4.17.0" - "@typescript-eslint/types" "4.17.0" - "@typescript-eslint/typescript-estree" "4.17.0" + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.17.0.tgz#f4edf94eff3b52a863180f7f89581bf963e3d37d" - integrity sha512-OJ+CeTliuW+UZ9qgULrnGpPQ1bhrZNFpfT/Bc0pzNeyZwMik7/ykJ0JHnQ7krHanFN9wcnPK89pwn84cRUmYjw== +"@typescript-eslint/scope-manager@4.22.0": + version "4.22.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz#ed411545e61161a8d702e703a4b7d96ec065b09a" + integrity sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q== dependencies: - "@typescript-eslint/types" "4.17.0" - "@typescript-eslint/visitor-keys" "4.17.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" -"@typescript-eslint/types@4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.17.0.tgz#f57d8fc7f31b348db946498a43050083d25f40ad" - integrity sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g== +"@typescript-eslint/types@4.22.0": + version "4.22.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.0.tgz#0ca6fde5b68daf6dba133f30959cc0688c8dd0b6" + integrity sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA== -"@typescript-eslint/typescript-estree@4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz#b835d152804f0972b80dbda92477f9070a72ded1" - integrity sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ== +"@typescript-eslint/typescript-estree@4.22.0": + version "4.22.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz#b5d95d6d366ff3b72f5168c75775a3e46250d05c" + integrity sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg== dependencies: - "@typescript-eslint/types" "4.17.0" - "@typescript-eslint/visitor-keys" "4.17.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.17.0": - version "4.17.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz#9c304cfd20287c14a31d573195a709111849b14d" - integrity sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ== +"@typescript-eslint/visitor-keys@4.22.0": + version "4.22.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz#169dae26d3c122935da7528c839f42a8a42f6e47" + integrity sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw== dependencies: - "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/types" "4.22.0" eslint-visitor-keys "^2.0.0" -JSONStream@^1.0.4, JSONStream@^1.3.4, JSONStream@^1.3.5: +JSONStream@^1.0.4: version "1.3.5" - resolved "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz?cache=0&sync_timestamp=1589682277271&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2FJSONStream%2Fdownload%2FJSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha1-MgjB8I06TZkmGrZPkjArwV4RHKA= + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" @@ -1258,8 +1157,8 @@ abab@^2.0.3, abab@^2.0.5: abbrev@1, abbrev@~1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== acorn-globals@^6.0.0: version "6.0.0" @@ -1269,10 +1168,10 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: +acorn-jsx@^5.3.1: version "5.3.1" - resolved "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz?cache=0&sync_timestamp=1599499085730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns= + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== acorn-walk@^7.1.1: version "7.2.0" @@ -1281,286 +1180,257 @@ acorn-walk@^7.1.1: acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" - resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= - -acorn@^8.0.5: - version "8.1.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" - integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4= - dependencies: - es6-promisify "^5.0.0" +acorn@^8.1.0: + version "8.2.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.2.2.tgz#c4574e4fea298d6e6ed4b85ab844b06dd59f26d6" + integrity sha512-VrMS8kxT0e7J1EX0p6rI/E0FbfOVcvBpbIqHThFv+f8YrZIlMfVotYcXKVPmTvPW8sW5miJzfUFrrvthUZg8VQ== agent-base@6: version "6.0.2" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c= + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk= - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.5.2.tgz?cache=0&sync_timestamp=1592193910607&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagentkeepalive%2Fdownload%2Fagentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c= +agentkeepalive@^4.1.3: + version "4.1.4" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" + integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== dependencies: + debug "^4.1.0" + depd "^1.1.2" humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo= + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.5" - resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha1-GbDouuj0duW6ZmMAOHd1+xoApNo= - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.3: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.2.1" - resolved "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz#a5ac226171912447683524fa2f1248fcf8bac83d" - integrity sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ== +ajv@^8.0.1: + version "8.2.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz#c89d3380a784ce81b2085f48811c4c101df4c602" + integrity sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - ansi-colors@^4.1.1: version "4.1.1" - resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha1-y7muJWv3UK8eqzRPIpqif+lLo0g= + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" - resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&sync_timestamp=1583072748255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: - version "4.3.1" - resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&sync_timestamp=1583072748255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE= + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: - type-fest "^0.11.0" + type-fest "^0.21.3" ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-regex@^4.1.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: version "5.0.0" - resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1606792314427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" - resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606792314427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansicolors@~0.3.2: version "0.3.2" - resolved "https://registry.npm.taobao.org/ansicolors/download/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= ansistyles@~0.1.3: version "0.1.3" - resolved "https://registry.npm.taobao.org/ansistyles/download/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + resolved "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= any-observable@^0.3.0: version "0.3.0" - resolved "https://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha1-r5M0deWAamfQ198JDdXovvZdEZs= + resolved "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== anymatch@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" anymatch@^3.0.3: - version "3.1.1" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: +aproba@^1.0.3: version "1.2.0" - resolved "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -"aproba@^1.1.2 || 2", aproba@^2.0.0: +aproba@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/aproba/download/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha1-UlILiuW1aSFbNU78DKo/4eRaitw= + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== archy@~1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= are-we-there-yet@~1.1.2: version "1.1.5" - resolved "https://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" argparse@^1.0.7: version "1.0.10" - resolved "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argv-formatter@~1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/argv-formatter/download/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" + resolved "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= arr-diff@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" - resolved "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-differ@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/array-differ/download/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha1-PLs9DzFoEOr8xHYkc0I31q7krms= + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/array-ify/download/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-union@^1.0.1: version "1.0.2" - resolved "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-uniq@^1.0.1: version "1.0.3" - resolved "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.3.2: version "0.3.2" - resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= arrify@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/arrify/download/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo= + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== asap@^2.0.0: version "2.0.6" - resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1@~0.2.3: version "0.2.4" - resolved "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY= + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assign-symbols@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= astral-regex@^2.0.0: @@ -1570,33 +1440,33 @@ astral-regex@^2.0.0: asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha1-YCzUtG6EStTv/JKoARo8RuAjjcI= + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== atob@^2.1.2: version "2.1.2" - resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== await-lock@^2.0.1: version "2.1.0" - resolved "https://registry.npm.taobao.org/await-lock/download/await-lock-2.1.0.tgz#bc78c51d229a34d5d90965a1c94770e772c6145e" - integrity sha1-vHjFHSKaNNXZCWWhyUdw53LGFF4= + resolved "https://registry.npmjs.org/await-lock/-/await-lock-2.1.0.tgz#bc78c51d229a34d5d90965a1c94770e772c6145e" + integrity sha512-t7Zm5YGgEEc/3eYAicF32m/TNvL+XOeYZy9CvBUeJY/szM7frLolFylhrlZNWV/ohWhcUXygrBGjYmoQdxF4CQ== aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: version "1.11.0" - resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101421225&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk= + resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== babel-jest@^26.6.3: version "26.6.3" @@ -1660,14 +1530,14 @@ babel-preset-jest@^26.6.2: babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base@^0.11.1: version "0.11.2" - resolved "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1679,50 +1549,37 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" -before-after-hook@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/before-after-hook/download/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU= - -bin-links@^1.1.2, bin-links@^1.1.8: - version "1.1.8" - resolved "https://registry.npm.taobao.org/bin-links/download/bin-links-1.1.8.tgz?cache=0&sync_timestamp=1601491332458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbin-links%2Fdownload%2Fbin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228" - integrity sha1-vTmq2rXcS9rCIqB99brxr3RbIig= - dependencies: - bluebird "^3.5.3" - cmd-shim "^3.0.0" - gentle-fs "^2.3.0" - graceful-fs "^4.1.15" +before-after-hook@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.1.tgz#73540563558687586b52ed217dad6a802ab1549c" + integrity sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw== + +bin-links@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-2.2.1.tgz#347d9dbb48f7d60e6c11fe68b77a424bee14d61b" + integrity sha512-wFzVTqavpgCCYAh8SVBdnZdiQMxTkGR+T3b14CNpBXIBe2neJWaMGAZ55XWWHELJJ89dscuq0VCBqcVaIOgCMg== + dependencies: + cmd-shim "^4.0.1" + mkdirp "^1.0.3" npm-normalize-package-bin "^1.0.0" - write-file-atomic "^2.3.0" + read-cmd-shim "^2.0.0" + rimraf "^3.0.0" + write-file-atomic "^3.0.3" -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= +binary-extensions@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bottleneck@^2.18.1: version "2.19.5" - resolved "https://registry.npm.taobao.org/bottleneck/download/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha1-XfC5D1n9R2VuvmPHiphBkgXK3ZE= - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz?cache=0&sync_timestamp=1609220982141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fboxen%2Fdownload%2Fboxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" + resolved "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== brace-expansion@^1.1.7: version "1.1.11" @@ -1734,8 +1591,8 @@ brace-expansion@^1.1.7: braces@^2.3.1: version "2.3.2" - resolved "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -1750,91 +1607,88 @@ braces@^2.3.1: braces@^3.0.1: version "3.0.2" - resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browser-process-hrtime@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY= + resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.14.5: - version "4.16.3" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + version "4.16.6" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^1.1.71" bs-logger@0.x: version "0.2.6" - resolved "https://registry.npm.taobao.org/bs-logger/download/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha1-6302UwenLPl0zGzadraDVK0za9g= + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: fast-json-stable-stringify "2.x" bser@2.1.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/bser/download/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU= + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== builtin-modules@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtins@^1.0.3: version "1.0.3" - resolved "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/byline/download/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/byte-size/download/byte-size-5.0.1.tgz?cache=0&sync_timestamp=1590576785550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbyte-size%2Fdownload%2Fbyte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha1-S2UQOaXs2Wdn5xo9ftOA5IvtQZE= +byte-size@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" + integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw= +cacache@^15.0.3, cacache@^15.0.5, cacache@^15.0.6: + version "15.0.6" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" + integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w== dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" unique-filename "^1.1.1" - y18n "^4.0.0" cache-base@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -1848,90 +1702,75 @@ cache-base@^1.0.1: cachedir@2.2.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/cachedir/download/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" - integrity sha1-Ga+kMF4F155BdWaILgyPlg9i/w4= + resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" + integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ== -call-bind@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.0.tgz?cache=0&sync_timestamp=1604115081161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" - integrity sha1-JBJwVLs/m9y0sfuCQYGGBy93uM4= +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" - get-intrinsic "^1.0.0" - -call-limit@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/call-limit/download/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" - integrity sha1-7xXyZw2z8ZklV+LZZavEWebjWNQ= + get-intrinsic "^1.0.2" caller-callsite@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1574395542397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A= + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.0.0: version "6.2.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001181: - version "1.0.30001199" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001199.tgz#062afccaad21023e2e647d767bac4274b8b8fd7f" - integrity sha512-ifbK2eChUCFUwGhlEzIoVwzFt1+iriSjyKKFYNfv6hN34483wyWpLLavYQXhnR036LhkdUYaSDpHg1El++VgHQ== +caniuse-lite@^1.0.30001219: + version "1.0.30001219" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz#5bfa5d0519f41f993618bd318f606a4c4c16156b" + integrity sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ== capture-exit@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha1-+5U7+uvreB9iiYI52rtCbQilCaQ= + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: rsvp "^4.8.4" -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha1-psC74fOPOqC5Ijjstv9Cw0TUE10= - cardinal@^2.1.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/cardinal/download/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + resolved "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= dependencies: ansicolors "~0.3.2" @@ -1939,20 +1778,12 @@ cardinal@^2.1.1: caseless@~0.12.0: version "0.12.0" - resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo= - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" - resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" @@ -1963,8 +1794,8 @@ chalk@^1.0.0, chalk@^1.1.3: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -1972,8 +1803,16 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4 chalk@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1591687042638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ= + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -1985,30 +1824,25 @@ char-regex@^1.0.2: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= - -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs= + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc= +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y= + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cidr-regex@^2.0.10: - version "2.0.10" - resolved "https://registry.npm.taobao.org/cidr-regex/download/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" - integrity sha1-rxOHi9StcE3nfW3IAHmTWLOvpw0= +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== dependencies: - ip-regex "^2.1.0" + ip-regex "^4.1.0" cjs-module-lexer@^0.6.0: version "0.6.0" @@ -2017,8 +1851,8 @@ cjs-module-lexer@^0.6.0: class-utils@^0.3.5: version "0.3.6" - resolved "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -2027,17 +1861,12 @@ class-utils@^0.3.5: clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-columns@^3.1.2: version "3.1.2" - resolved "https://registry.npm.taobao.org/cli-columns/download/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + resolved "https://registry.npmjs.org/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= dependencies: string-width "^2.0.0" @@ -2045,32 +1874,31 @@ cli-columns@^3.1.2: cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" -cli-table3@^0.5.0, cli-table3@^0.5.1: - version "0.5.1" - resolved "https://registry.npm.taobao.org/cli-table3/download/cli-table3-0.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-table3%2Fdownload%2Fcli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha1-AlI3LZTfxA29jfBgBfSPMfZW8gI= +cli-table3@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== dependencies: object-assign "^4.1.0" - string-width "^2.1.1" + string-width "^4.2.0" optionalDependencies: colors "^1.1.2" cli-table@^0.3.1: - version "0.3.4" - resolved "https://registry.npm.taobao.org/cli-table/download/cli-table-0.3.4.tgz#5b37fd723751f1a6e9e70d55953a75e16eab958e" - integrity sha1-Wzf9cjdR8abp5w1VlTp14W6rlY4= + version "0.3.6" + resolved "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc" + integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== dependencies: - chalk "^2.4.1" - string-width "^4.2.0" + colors "1.0.3" cli-truncate@^0.2.1: version "0.2.1" - resolved "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= dependencies: slice-ansi "0.0.4" @@ -2078,26 +1906,8 @@ cli-truncate@^0.2.1: cli-width@^2.0.0: version "2.2.1" - resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha1-sEM9C06chH7xiGik7xb9X8gnHEg= - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== cliui@^6.0.0: version "6.0.0" @@ -2119,25 +1929,24 @@ cliui@^7.0.2: clone@^1.0.2: version "1.0.4" - resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -cmd-shim@^3.0.0, cmd-shim@^3.0.3: - version "3.0.3" - resolved "https://registry.npm.taobao.org/cmd-shim/download/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" - integrity sha1-LDUjjT3zfZjs3X1fa43Gshytx8s= +cmd-shim@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" + integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" + mkdirp-infer-owner "^2.0.0" co@^4.6.0: version "4.6.0" - resolved "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collect-v8-coverage@^1.0.0: @@ -2147,7 +1956,7 @@ collect-v8-coverage@^1.0.0: collection-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" @@ -2155,41 +1964,46 @@ collection-visit@^1.0.0: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1: +colorette@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colors@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + colors@^1.1.2: version "1.4.0" - resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== columnify@~1.5.4: version "1.5.4" - resolved "https://registry.npm.taobao.org/columnify/download/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= dependencies: strip-ansi "^3.0.0" @@ -2197,20 +2011,20 @@ columnify@~1.5.4: combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" - resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: version "2.20.3" - resolved "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1598576136669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM= + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commitizen@^4.0.3: - version "4.2.1" - resolved "https://registry.npm.taobao.org/commitizen/download/commitizen-4.2.1.tgz#3b098b16c6b1a37f0d129018dff6751b20cd3103" - integrity sha1-OwmLFsaxo38NEpAY3/Z1GyDNMQM= + version "4.2.3" + resolved "https://registry.npmjs.org/commitizen/-/commitizen-4.2.3.tgz#088d0ef72500240d331b11e02e288223667c1475" + integrity sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ== dependencies: cachedir "2.2.0" cz-conventional-changelog "3.2.0" @@ -2227,71 +2041,46 @@ commitizen@^4.0.3: strip-bom "4.0.0" strip-json-comments "3.0.1" +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/compare-func/download/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha1-+2XnXtvd/S5WhVTotbBf/3pR/LM= + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" dot-prop "^5.1.0" component-emitter@^1.2.1: version "1.3.0" - resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha1-D96NCRIA616AjK8l/mGMAvSOTvo= - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^3.0.0: - version "3.1.5" - resolved "https://registry.npm.taobao.org/configstore/download/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" - integrity sha1-6a8zH63BTavVRNPn523ERqCaUw8= - dependencies: - dot-prop "^4.2.1" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= conventional-changelog-angular@^5.0.0: version "5.0.12" - resolved "https://registry.npm.taobao.org/conventional-changelog-angular/download/conventional-changelog-angular-5.0.12.tgz?cache=0&sync_timestamp=1604539725902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-changelog-angular%2Fdownload%2Fconventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" - integrity sha1-yXm4uSHL/iZALrPaW7/aAthlork= + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== dependencies: compare-func "^2.0.0" q "^1.5.1" conventional-changelog-writer@^4.0.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/conventional-changelog-writer/download/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" - integrity sha1-HKeIC3WqKGla0zMSofI2b0sSZZ8= + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" + integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== dependencies: compare-func "^2.0.0" conventional-commits-filter "^2.0.7" @@ -2306,63 +2095,51 @@ conventional-changelog-writer@^4.0.0: conventional-commit-types@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/conventional-commit-types/download/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" - integrity sha1-fJIU5Y6uk+hd1m2/uv5+T/+iNls= + resolved "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: version "2.0.7" - resolved "https://registry.npm.taobao.org/conventional-commits-filter/download/conventional-commits-filter-2.0.7.tgz?cache=0&sync_timestamp=1604542867941&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-filter%2Fdownload%2Fconventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha1-+Nm08YL84Aya9xOdpJNlsTbIoLM= + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== dependencies: lodash.ismatch "^4.4.0" modify-values "^1.0.0" conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: - version "3.2.0" - resolved "https://registry.npm.taobao.org/conventional-commits-parser/download/conventional-commits-parser-3.2.0.tgz?cache=0&sync_timestamp=1604539710083&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconventional-commits-parser%2Fdownload%2Fconventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" - integrity sha1-niYbE5ykt7KbzrvFRGDaNolABMo= + version "3.2.1" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" + integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" lodash "^4.17.15" meow "^8.0.0" - split2 "^2.0.0" + split2 "^3.0.0" through2 "^4.0.0" trim-off-newlines "^1.0.0" convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" - resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" - resolved "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" - resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.2.0: version "5.2.1" - resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo= + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" @@ -2371,8 +2148,8 @@ cosmiconfig@^5.2.0: cosmiconfig@^7.0.0: version "7.0.0" - resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-7.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha1-75tE13OVnK5j3ezRIt4jhTtg+NM= + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -2382,8 +2159,8 @@ cosmiconfig@^7.0.0: coveralls@^3.0.2: version "3.1.0" - resolved "https://registry.npm.taobao.org/coveralls/download/coveralls-3.1.0.tgz?cache=0&sync_timestamp=1587767968172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcoveralls%2Fdownload%2Fcoveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" - integrity sha1-E8dU1eei3YtE/lJp4hyjlPtNYVs= + resolved "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" + integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ== dependencies: js-yaml "^3.13.1" lcov-parse "^1.0.0" @@ -2391,26 +2168,10 @@ coveralls@^3.0.2: minimist "^1.2.5" request "^2.88.2" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz?cache=0&sync_timestamp=1609302869441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" - resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -2420,22 +2181,17 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz?cache=0&sync_timestamp=1609302869441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz?cache=0&sync_timestamp=1599137690451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - crypto-random-string@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-2.0.0.tgz?cache=0&sync_timestamp=1599137690451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha1-7yp6lm7BEIM4g2m6oC6+rSKbMNU= + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== cssom@^0.4.4: version "0.4.4" @@ -2455,19 +2211,14 @@ cssstyle@^2.3.0: cssom "~0.3.6" csv-parse@^4.15.3: - version "4.15.3" - resolved "https://registry.npm.taobao.org/csv-parse/download/csv-parse-4.15.3.tgz#8a62759617a920c328cb31c351b05053b8f92b10" - integrity sha1-imJ1lhepIMMoyzHDUbBQU7j5KxA= - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + version "4.15.4" + resolved "https://registry.npmjs.org/csv-parse/-/csv-parse-4.15.4.tgz#ad1ec62aaf71a642982dfcb81f1848184d691db5" + integrity sha512-OdBbFc0yZhOm17lSxqkirrHlFFVpKRT0wp4DAGoJelsP3LbGzV9LNr7XmM/lrr0uGkCtaqac9UhP8PDHXOAbMg== cz-conventional-changelog@3.2.0: version "3.2.0" - resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477" - integrity sha1-au8fiS1kETND1+RVUpCJrJ8g5Hc= + resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477" + integrity sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg== dependencies: chalk "^2.4.1" commitizen "^4.0.3" @@ -2480,8 +2231,8 @@ cz-conventional-changelog@3.2.0: cz-conventional-changelog@^3.2.0: version "3.3.0" - resolved "https://registry.npm.taobao.org/cz-conventional-changelog/download/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" - integrity sha1-kkaUfJBAQUmz/iz37pGsrTt9ItI= + resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" + integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== dependencies: chalk "^2.4.1" commitizen "^4.0.3" @@ -2494,7 +2245,7 @@ cz-conventional-changelog@^3.2.0: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" @@ -2510,65 +2261,51 @@ data-urls@^2.0.0: date-fns@^1.27.2: version "1.30.1" - resolved "https://registry.npm.taobao.org/date-fns/download/date-fns-1.30.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw= + resolved "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== dateformat@^3.0.0: version "3.0.3" - resolved "https://registry.npm.taobao.org/dateformat/download/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha1-puN0maTZqc+F71hyBE1ikByYia4= + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1607566517339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.0: +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.3.1" - resolved "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566517339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4= + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" debug@^2.2.0, debug@^2.3.3: version "2.6.9" - resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.1.0: version "3.2.7" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566517339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o= + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.2.0" - resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502914504&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E= - dependencies: - ms "2.1.2" - debuglog@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize-keys@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decimal.js@^10.2.1: @@ -2578,22 +2315,22 @@ decimal.js@^10.2.1: decode-uri-component@^0.2.0: version "0.2.0" - resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= dedent@0.7.0, dedent@^0.7.0: version "0.7.0" - resolved "https://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" - resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= deepmerge@^4.2.2: @@ -2603,43 +2340,43 @@ deepmerge@^4.2.2: defaults@^1.0.3: version "1.0.3" - resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" define-properties@^1.1.3: version "1.1.3" - resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" - resolved "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" del@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/del/download/del-3.0.0.tgz?cache=0&sync_timestamp=1601076936089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= dependencies: globby "^6.1.0" @@ -2651,8 +2388,8 @@ del@^3.0.0: del@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/del/download/del-6.0.0.tgz?cache=0&sync_timestamp=1601076936089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha1-C0DQMyzqdD8WFPgYvk/rcXcUyVI= + resolved "https://registry.npmjs.org/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== dependencies: globby "^11.0.1" graceful-fs "^4.2.4" @@ -2665,47 +2402,42 @@ del@^6.0.0: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegates@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" - resolved "https://registry.npm.taobao.org/deprecation/download/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk= + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/detect-file/download/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= detect-indent@6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha1-Cr0PVJ9p/GZZolT+lnhhhrb1KP0= - -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -dezalgo@^1.0.0, dezalgo@~1.0.3: +dezalgo@^1.0.0: version "1.0.3" - resolved "https://registry.npm.taobao.org/dezalgo/download/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: asap "^2.0.0" @@ -2718,20 +2450,25 @@ diff-sequences@^26.6.2: diff@^4.0.1: version "4.0.2" - resolved "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz?cache=0&sync_timestamp=1578918306878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0= + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== dir-glob@^3.0.0, dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" @@ -2742,68 +2479,36 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -dot-prop@^4.2.1: - version "4.2.1" - resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha1-RYhBlKcfws2nHLtLzrOk3S9DO6Q= - dependencies: - is-obj "^1.0.0" - dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - integrity sha1-pTF0Wb09eauIz/bkQFemo/ux/O8= - duplexer2@~0.1.0: version "0.1.4" - resolved "https://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= dependencies: readable-stream "^2.0.2" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/editor/download/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= - -electron-to-chromium@^1.3.649: - version "1.3.687" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.687.tgz#c336184b7ab70427ffe2ee79eaeaedbc1ad8c374" - integrity sha512-IpzksdQNl3wdgkzf7dnA7/v10w0Utf1dF2L+B4+gKrloBrxCut+au+kky3PYvle3RMdSxZP+UiCZtLbcYRxSNQ== +electron-to-chromium@^1.3.723: + version "1.3.725" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz#04fc83f9189169aff50f0a00c6b4090b910cba85" + integrity sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw== elegant-spinner@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + resolved "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= emittery@^0.7.1: @@ -2811,125 +2516,88 @@ emittery@^0.7.1: resolved "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212229889&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= - emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212229889&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encoding@^0.1.11: +encoding@^0.1.12: version "0.1.13" - resolved "https://registry.npm.taobao.org/encoding/download/encoding-0.1.13.tgz?cache=0&sync_timestamp=1594362877372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fencoding%2Fdownload%2Fencoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha1-VldK/deR9UqOmyeFwFgqLSYhD6k= + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enquirer@^2.3.5: version "2.3.6" - resolved "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693195602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00= + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" env-ci@^5.0.0: version "5.0.2" - resolved "https://registry.npm.taobao.org/env-ci/download/env-ci-5.0.2.tgz#48b6687f8af8cdf5e31b8fcf2987553d085249d9" - integrity sha1-SLZof4r4zfXjG4/PKYdVPQhSSdk= + resolved "https://registry.npmjs.org/env-ci/-/env-ci-5.0.2.tgz#48b6687f8af8cdf5e31b8fcf2987553d085249d9" + integrity sha512-Xc41mKvjouTXD3Oy9AqySz1IeyvJvHZ20Twf5ZLYbNpPPIuCnL/qHCmNlD01LoNy0JTunw9HPYVptD19Ac7Mbw== dependencies: execa "^4.0.0" java-properties "^1.0.0" env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM= - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz?cache=0&sync_timestamp=1592481014549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferr-code%2Fdownload%2Ferr-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -errno@~0.1.7: - version "0.1.8" - resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8= - dependencies: - prr "~1.0.1" +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1: - version "1.17.7" - resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" - integrity sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw= - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.1: - version "1.18.0-next.1" - resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" - integrity sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= +es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo= - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -2937,7 +2605,7 @@ escalade@^3.1.1: escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escape-string-regexp@^2.0.0: @@ -2958,48 +2626,48 @@ escodegen@^2.0.0: source-map "~0.6.1" eslint-config-prettier@^6.12.0: - version "6.12.0" - resolved "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.12.0.tgz?cache=0&sync_timestamp=1601053002831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.12.0.tgz#9eb2bccff727db1c52104f0b49e87ea46605a0d2" - integrity sha1-nrK8z/cn2xxSEE8LSeh+pGYFoNI= + version "6.15.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" + integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== dependencies: get-stdin "^6.0.0" eslint-plugin-prettier@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" - integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + version "3.4.0" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" + integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== dependencies: prettier-linter-helpers "^1.0.0" eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599933677754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw= + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1592222030474&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc= + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-2.0.0.tgz?cache=0&sync_timestamp=1597435545176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha1-If3I+82ceVzAMh8FY3AglXUVEag= + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^7.22.0: - version "7.22.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz#07ecc61052fec63661a2cab6bd507127c07adc6f" - integrity sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== + version "7.25.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" + integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.0" @@ -3039,16 +2707,7 @@ eslint@^7.22.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0: - version "7.3.0" - resolved "https://registry.npm.taobao.org/espree/download/espree-7.3.0.tgz?cache=0&sync_timestamp=1598127498738&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha1-3DBDfPZ5R89XYSHr14DxXurHI0g= - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.3.0" - -espree@^7.3.1: +espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== @@ -3059,8 +2718,8 @@ espree@^7.3.1: esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" - resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: version "1.4.0" @@ -3071,48 +2730,35 @@ esquery@^1.4.0: esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha1-eteWTWeauyi+5yzsY3WLHF0smSE= + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" - resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA= + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.npm.taobao.org/exec-sh/download/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha1-OgGM61JsxvbfK7UEsr/o46STTsU= - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + version "0.3.6" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1594145111640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" get-stream "^4.0.0" @@ -3124,8 +2770,8 @@ execa@^1.0.0: execa@^4.0.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha1-TlSRrRVy8vF6d9OIxshXE1sihHo= + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -3139,8 +2785,8 @@ execa@^4.0.0: execa@^5.0.0: version "5.0.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha1-QCmwAHmYqEH70QMuX03oajweM3Y= + resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" @@ -3154,12 +2800,12 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" - resolved "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-brackets@^2.1.4: version "2.1.4" - resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" @@ -3172,7 +2818,7 @@ expand-brackets@^2.1.4: expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/expand-tilde/download/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: homedir-polyfill "^1.0.1" @@ -3191,21 +2837,21 @@ expect@^26.6.2: expression-eval@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/expression-eval/download/expression-eval-2.1.0.tgz#422915caa46140a7c5b5f248650dea8bf8236e62" - integrity sha1-QikVyqRhQKfFtfJIZQ3qi/gjbmI= + resolved "https://registry.npmjs.org/expression-eval/-/expression-eval-2.1.0.tgz#422915caa46140a7c5b5f248650dea8bf8236e62" + integrity sha512-FUJO/Akvl/JOWkvlqZaqbkhsEWlCJWDeZG4tzX96UH68D9FeRgYgtb55C2qtqbORC0Q6x5419EDjWu4IT9kQfg== dependencies: jsep "^0.3.0" extend-shallow@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" - resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" @@ -3213,13 +2859,13 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@~3.0.2: version "3.0.2" - resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" @@ -3227,8 +2873,8 @@ external-editor@^3.0.3: extglob@^2.0.4: version "2.0.4" - resolved "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -3241,28 +2887,28 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" - resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: version "3.1.3" - resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599675178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.2.0" - resolved "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM= + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.1.1: - version "3.2.4" - resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592290280465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha1-0grvv5lXk4Pn88xmUpFYybmFVNM= + version "3.2.5" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -3273,36 +2919,31 @@ fast-glob@^3.1.1: fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz?cache=0&sync_timestamp=1595428000133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-levenshtein%2Fdownload%2Ffast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.10.0" - resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.10.0.tgz?cache=0&sync_timestamp=1608465812256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" - integrity sha1-dNvvzK3pZJMs31AEc+8wJxnGUrs= + version "1.11.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: version "2.0.1" - resolved "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU= + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: bser "2.1.1" -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - figures@^1.7.0: version "1.7.0" - resolved "https://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz?cache=0&sync_timestamp=1581865639901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= dependencies: escape-string-regexp "^1.0.5" @@ -3310,15 +2951,15 @@ figures@^1.7.0: figures@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz?cache=0&sync_timestamp=1581865639901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" figures@^3.0.0: version "3.2.0" - resolved "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865639901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" @@ -3331,7 +2972,7 @@ file-entry-cache@^6.0.1: fill-range@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" @@ -3341,62 +2982,57 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-node-modules@2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/find-node-modules/download/find-node-modules-2.0.0.tgz?cache=0&sync_timestamp=1594804338368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-node-modules%2Fdownload%2Ffind-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" - integrity sha1-XbH7nmaKPUUds9YYzRZ83VnkG2k= + resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" + integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== dependencies: findup-sync "^3.0.0" merge "^1.2.1" -find-npm-prefix@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/find-npm-prefix/download/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" - integrity sha1-jYzix4s7S55myKzGo3wjHrhBz98= - find-root@1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/find-root/download/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ= + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== find-up@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1597170240264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" find-up@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597170240264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597170240264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" find-versions@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/find-versions/download/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" - integrity sha1-PFflc7+XdpuMuN8Wk0tieRXaSWU= + resolved "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== dependencies: semver-regex "^3.1.2" findup-sync@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/findup-sync/download/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha1-F7EI+e5RLft6XH88iyfqnhqcCNE= + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== dependencies: detect-file "^1.0.0" is-glob "^4.0.0" @@ -3416,33 +3052,25 @@ flatted@^3.1.0: resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - fn-name@~2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/fn-name/download/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" + resolved "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= for-in@^1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.3.2: version "2.3.3" - resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" @@ -3450,22 +3078,14 @@ form-data@~2.3.2: fragment-cache@^0.2.1: version "0.2.1" - resolved "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/from2/download/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - -from2@^2.1.0, from2@^2.3.0: +from2@^2.3.0: version "2.3.0" - resolved "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" @@ -3473,48 +3093,29 @@ from2@^2.1.0, from2@^2.3.0: fs-extra@8.1.0: version "8.1.0" - resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1591231538901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" fs-extra@^9.0.0: - version "9.0.1" - resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-9.0.1.tgz?cache=0&sync_timestamp=1591231538901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha1-kQ2gBiQ3ukw5/t2GPxZ1zP78ufw= + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" - universalify "^1.0.0" - -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha1-zP+FcIQef+QmVpPaiJNsVa7X98c= - dependencies: - minipass "^2.6.0" - -fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.npm.taobao.org/fs-vacuum/download/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= - dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" + universalify "^2.0.0" -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: - version "1.0.10" - resolved "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" + minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" @@ -3528,18 +3129,18 @@ fsevents@^2.1.2: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffunctional-red-black-tree%2Fdownload%2Ffunctional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= g-status@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/g-status/download/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - integrity sha1-Jw/TIRno/JSW8Gb+X+iOCmvHi5c= + resolved "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" + integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== dependencies: arrify "^1.0.1" matcher "^1.0.0" @@ -3547,7 +3148,7 @@ g-status@^2.0.2: gauge@~2.7.3: version "2.7.4" - resolved "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" @@ -3559,52 +3160,20 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.npm.taobao.org/genfun/download/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc= - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk= - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -gentle-fs@^2.3.0, gentle-fs@^2.3.1: - version "2.3.1" - resolved "https://registry.npm.taobao.org/gentle-fs/download/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" - integrity sha1-ESAb9mwY+TDdynLPaUYL36BXJ7E= - dependencies: - aproba "^1.1.2" - chownr "^1.1.2" - cmd-shim "^3.0.3" - fs-vacuum "^1.2.10" - graceful-fs "^4.1.11" - iferr "^0.1.5" - infer-owner "^1.0.4" - mkdirp "^0.5.1" - path-is-inside "^1.0.2" - read-cmd-shim "^1.0.1" - slide "^1.1.6" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= - get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.0: - version "1.0.2" - resolved "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.0.2.tgz?cache=0&sync_timestamp=1608274246879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-intrinsic%2Fdownload%2Fget-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" - integrity sha1-aCDaIm5QskiU4IhZRp3Gg2FUXUk= +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -3612,8 +3181,8 @@ get-intrinsic@^1.0.0: get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" - resolved "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&sync_timestamp=1575993577501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha1-tf3nfyLL4185C04ImSLFC85u9mQ= + resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-package-type@^0.1.0: version "0.1.0" @@ -3622,53 +3191,48 @@ get-package-type@^0.1.0: get-stdin@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs= + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stdin@^7.0.0: version "7.0.0" - resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha1-jV3pjxUXGhJcXlFmQ8em0OqKlvY= + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.0.0: version "5.2.0" - resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha1-SWaheV7lrOZecGxLe+txJX1uItM= + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-6.0.0.tgz?cache=0&sync_timestamp=1597056535605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha1-PgASy2gnMZ2icG5gGhWD6GKaZxg= + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" - resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" - resolved "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" git-log-parser@^1.2.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/git-log-parser/download/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" + resolved "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" integrity sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= dependencies: argv-formatter "~1.0.0" @@ -3679,16 +3243,16 @@ git-log-parser@^1.2.0: traverse "~0.6.6" glob-parent@^5.0.0, glob-parent@^5.1.0: - version "5.1.1" - resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha1-tsHvQXxOVmPqSY8cRa+saRa7wik= + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@7.1.4: version "7.1.4" - resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha1-qmCKL2xXetNX4a5aXCbZqNGWklU= + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3699,8 +3263,8 @@ glob@7.1.4: glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" - resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3709,17 +3273,17 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0, global-dirs@^0.1.1: +global-dirs@^0.1.1: version "0.1.1" - resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz?cache=0&sync_timestamp=1573231918216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobal-dirs%2Fdownload%2Fglobal-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= dependencies: ini "^1.3.4" global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/global-modules/download/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o= + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" @@ -3727,7 +3291,7 @@ global-modules@^1.0.0: global-prefix@^1.0.1: version "1.0.2" - resolved "https://registry.npm.taobao.org/global-prefix/download/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= dependencies: expand-tilde "^2.0.2" @@ -3738,27 +3302,27 @@ global-prefix@^1.0.1: globals@^11.1.0: version "11.12.0" - resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1596709302233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^12.1.0: version "12.4.0" - resolved "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1596709302233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg= + resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: type-fest "^0.8.1" globals@^13.6.0: - version "13.6.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz#d77138e53738567bb96a3916ff6f6b487af20ef7" - integrity sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ== + version "13.8.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== dependencies: type-fest "^0.20.2" globby@^11.0.0, globby@^11.0.1: - version "11.0.2" - resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.2.tgz?cache=0&sync_timestamp=1609936472420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" - integrity sha1-GvU4t2ajtUDr+1ijKy4tWJcyHYM= + version "11.0.3" + resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -3769,7 +3333,7 @@ globby@^11.0.0, globby@^11.0.1: globby@^6.1.0: version "6.1.0" - resolved "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" @@ -3778,37 +3342,20 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz?cache=0&sync_timestamp=1607658223946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgot%2Fdownload%2Fgot-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588086924019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha1-Ila94U02MpWMRl68ltxGfKB6Kfs= +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: + version "4.2.6" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== growly@^1.3.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= handlebars@^4.7.6: - version "4.7.6" - resolved "https://registry.npm.taobao.org/handlebars/download/handlebars-4.7.6.tgz?cache=0&sync_timestamp=1585937260212&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandlebars%2Fdownload%2Fhandlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha1-1MBcG6+Q6ZRfd6pop6IZqkp9904= + version "4.7.7" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" neo-async "^2.6.0" @@ -3819,52 +3366,57 @@ handlebars@^4.7.6: har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: version "5.1.5" - resolved "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596084327526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha1-HwgDufjLIMD6E4It8ezds2veHv0= + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: ajv "^6.12.3" har-schema "^2.0.0" hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/hard-rejection/download/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM= + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg= +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-unicode@^2.0.0: version "2.0.1" - resolved "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" - resolved "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" @@ -3873,7 +3425,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" @@ -3882,12 +3434,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" - resolved "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" @@ -3895,39 +3447,32 @@ has-values@^1.0.0: has@^1.0.3: version "1.0.3" - resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg= + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" hook-std@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/hook-std/download/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" - integrity sha1-/5qv3rtqmJo1T3KbtkRc9KOnB3w= + resolved "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" + integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: - version "2.8.8" - resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg= +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^3.0.6: - version "3.0.7" - resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" - integrity sha1-owcnOF6oWs/O6U4KrZ42jHkuA2w= - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.0.tgz#9f06639a90beff66cacae6e77f8387b431d61ddc" - integrity sha512-fqhGdjk4av7mT9fU/B01dUtZ+WZSc/XEXMoLXDVZukiQRXxeHSSz3AqbeWRJHtF8EQYHlAgB1NSAHU0Cm7aqZA== +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" @@ -3940,26 +3485,18 @@ html-encoding-sniffer@^2.0.1: html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-escaper%2Fdownload%2Fhtml-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha1-39YAJ9o2o238viNiYsAKWCJoFFM= + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz?cache=0&sync_timestamp=1583107845365&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-cache-semantics%2Fdownload%2Fhttp-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha1-ObDhat2bYFvwqe89nar0hDtMrNI= - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha1-5IIb7vWyFCogJr1zkm/lN2McVAU= - dependencies: - agent-base "4" - debug "3.1.0" +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-proxy-agent@^4.0.0: +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha1-ioyO9/WTLM+VPClsqCkblap0qjo= + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" agent-base "6" @@ -3967,50 +3504,42 @@ http-proxy-agent@^4.0.0: http-signature@~1.2.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868483922&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha1-TuenN6vZJniik9mzShr00NCMeHs= - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - https-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha1-4qkFQqu2inYuCghQ9sntrf2FBrI= + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: agent-base "6" debug "4" human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA= + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" husky@^2.3.0: version "2.7.0" - resolved "https://registry.npm.taobao.org/husky/download/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05" - integrity sha1-wKmmo7URRiJOEbugtGu6VG5GHQU= + resolved "https://registry.npmjs.org/husky/-/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05" + integrity sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg== dependencies: cosmiconfig "^5.2.0" execa "^1.0.0" @@ -4025,73 +3554,58 @@ husky@^2.3.0: iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: version "0.6.2" - resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE= + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -iferr@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/iferr/download/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" - integrity sha1-6f3kmp2gbcSkGUxsntbQgwUDem0= - -ignore-walk@^3.0.1: +ignore-walk@^3.0.3: version "3.0.3" - resolved "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc= + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" ignore@^4.0.6: version "4.0.6" - resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.4: version "5.1.8" - resolved "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha1-8VCotQo0KJsz4i9YiavU2AFvDlc= + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== import-fresh@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.2.1" - resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY= + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-from@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/import-from/download/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha1-BVz+w4zVon2AV8pRN219O/CJGWY= + resolved "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== dependencies: resolve-from "^5.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-local@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -4102,25 +3616,25 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^3.0.0: version "3.2.0" - resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.3, infer-owner@^1.0.4: +infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflight@^1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -4128,34 +3642,39 @@ inflight@^1.0.4, inflight@~1.0.6: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" - resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.8.tgz?cache=0&sync_timestamp=1607907802342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.npm.taobao.org/init-package-json/download/init-package-json-1.10.3.tgz?cache=0&sync_timestamp=1602900788385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finit-package-json%2Fdownload%2Finit-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha1-Rf/i9hCoyhNPK9HbVjeyNQcPbL4= +ini@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +init-package-json@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.3.tgz#c8ae4f2a4ad353bcbc089e5ffe98a8f1a314e8fd" + integrity sha512-tk/gAgbMMxR6fn1MgMaM1HpU1ryAmBWWitnxG5OhuNXeX0cbpbgV5jA4AIpQJVNoyOfOevTtO6WX+rPs+EFqaQ== dependencies: glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + npm-package-arg "^8.1.2" promzard "^0.3.0" read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" + read-package-json "^3.0.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" validate-npm-package-name "^3.0.0" inquirer@6.5.2: version "6.5.2" - resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.2.tgz?cache=0&sync_timestamp=1595471629455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha1-rVCUI3XQNtMn/1KMCL1fqwiZKMo= + resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== dependencies: ansi-escapes "^3.2.0" chalk "^2.4.2" @@ -4171,14 +3690,6 @@ inquirer@6.5.2: strip-ansi "^5.1.0" through "^2.3.6" -into-stream@^5.0.0: - version "5.1.1" - resolved "https://registry.npm.taobao.org/into-stream/download/into-stream-5.1.1.tgz?cache=0&sync_timestamp=1597341484868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finto-stream%2Fdownload%2Finto-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" - integrity sha1-+aIKNIoR88E/rOInY/LQLhJ/Tbg= - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - into-stream@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" @@ -4187,101 +3698,101 @@ into-stream@^6.0.0: from2 "^2.3.0" p-is-promise "^3.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== -ip@1.1.5: +ip@^1.1.5: version "1.1.5" - resolved "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= is-accessor-descriptor@^0.1.6: version "0.1.6" - resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" - resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha1-76ouqdqg16suoTqXsritUf776L4= + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.2: - version "1.2.2" - resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz?cache=0&sync_timestamp=1600719276620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" - integrity sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk= - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw= - dependencies: - ci-info "^1.5.0" +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== is-ci@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw= + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" -is-cidr@^3.0.0: - version "3.1.1" - resolved "https://registry.npm.taobao.org/is-cidr/download/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" - integrity sha1-6S7xIb3sJ4InGnfOSHqLjfNxirc= +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== dependencies: - cidr-regex "^2.0.10" + cidr-regex "^3.1.1" -is-core-module@^2.1.0, is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411557629&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha1-lwN+89UiJNhRY/VZeytj2a/tmBo= +is-core-module@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" + integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw== dependencies: has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" - resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.2" - resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha1-vac28s2P0G0yhE53Q7+nSUw7/X4= + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" - resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -4289,8 +3800,8 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -4298,223 +3809,216 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" - resolved "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" - resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/is-generator-fn/download/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha1-fRQK3DiarzARqPKipM+m+q3/sRg= + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" - resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz?cache=0&sync_timestamp=1586162509580&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-installed-globally%2Fdownload%2Fis-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= -is-negative-zero@^2.0.0: +is-negative-zero@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.1.tgz?cache=0&sync_timestamp=1607126733599&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-negative-zero%2Fdownload%2Fis-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ= + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz?cache=0&sync_timestamp=1589567494220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-npm%2Fdownload%2Fis-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== is-number@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0, is-obj@^1.0.1: +is-obj@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-observable@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/is-observable/download/is-observable-1.1.0.tgz?cache=0&sync_timestamp=1596373335763&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-observable%2Fdownload%2Fis-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha1-s+mGyPRN6VCGfKtUA/WjRlAFl14= + resolved "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== dependencies: symbol-observable "^1.1.0" is-path-cwd@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-cwd@^2.2.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-in-cwd@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha1-WsSLNF72dTOb1sekipEhELJBz1I= + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-path-inside@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha1-9SIPyCo+IzdXKR3dycWHfyofMBc= + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-5.0.0.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q= + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + version "1.0.1" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-promise@^2.1.0: version "2.2.2" - resolved "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz?cache=0&sync_timestamp=1588001830257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-promise%2Fdownload%2Fis-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha1-OauVnMv5p3TPB597QMeib3YxNfE= - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k= +is-regex@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== dependencies: + call-bind "^1.0.2" has-symbols "^1.0.1" is-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz?cache=0&sync_timestamp=1609095675616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-retry-allowed%2Fdownload%2Fis-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha1-13hIi9CkZmo76KFIK58rqv7eqLQ= - -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha1-venDJoDW+uBBKdasnZIc54FfeOM= + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -is-symbol@^1.0.2: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" - resolved "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc= + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" is-text-path@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/is-text-path/download/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: text-extensions "^1.0.0" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-utf8@^0.2.1: version "0.2.1" - resolved "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.2.0: version "2.2.0" @@ -4523,42 +4027,37 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - isarray@1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" - resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= issue-parser@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/issue-parser/download/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" - integrity sha1-se3QYxXU8gRKl1Xa+F/a/em0AUo= + resolved "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== dependencies: lodash.capitalize "^4.2.1" lodash.escaperegexp "^4.1.2" @@ -4609,8 +4108,8 @@ istanbul-reports@^3.0.2: java-properties@^1.0.0: version "1.0.2" - resolved "https://registry.npm.taobao.org/java-properties/download/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" - integrity sha1-zNH6c5B0OKW1w4mCJp0Odx/nghE= + resolved "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== jest-changed-files@^26.6.2: version "26.6.2" @@ -4987,29 +4486,29 @@ jest@^26.6.3: js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796305651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172281856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha1-p6NBcPJqIbsWJCTYray0ETpp5II= + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^16.4.0: - version "16.5.1" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.5.1.tgz#4ced6bbd7b77d67fb980e64d9e3e6fb900f97dd6" - integrity sha512-pF73EOsJgwZekbDHEY5VO/yKXUkab/DuvrQB/ANVizbr6UAHJsDdHXuotZYwkJSGQl1JM+ivXaqY+XBDDL4TiA== + version "16.5.3" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" + integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== dependencies: abab "^2.0.5" - acorn "^8.0.5" + acorn "^8.1.0" acorn-globals "^6.0.0" cssom "^0.4.4" cssstyle "^2.3.0" @@ -5031,34 +4530,34 @@ jsdom@^16.4.0: webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" + whatwg-url "^8.5.0" ws "^7.4.4" xml-name-validator "^3.0.0" jsep@^0.3.0: version "0.3.5" - resolved "https://registry.npm.taobao.org/jsep/download/jsep-0.3.5.tgz#3fd79ebd92f6f434e4857d5272aaeef7d948264d" - integrity sha1-P9eevZL29DTkhX1Scqru99lIJk0= + resolved "https://registry.npmjs.org/jsep/-/jsep-0.3.5.tgz#3fd79ebd92f6f434e4857d5272aaeef7d948264d" + integrity sha512-AoRLBDc6JNnKjNcmonituEABS5bcfqDhQAWWXNTFrqu6nVXBpBAGfcoTGZMFlIrh9FjmE1CQyX9CTNwZrXMMDA== jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk= + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1599064788298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" @@ -5067,50 +4566,55 @@ json-schema-traverse@^1.0.0: json-schema@0.2.3: version "0.2.3" - resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stringify-nice@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.3.tgz#43991531d674ad5c19152d519047849935293add" + integrity sha512-w8+cZZFgcPtFkZTmkA1UpRH0GXXfpeuc/cClNkQjLt9JoQd8cBFSyB8J1WWjJrthIYViHobwnh3jA4z5X2LdGA== + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@2.x, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM= + version "2.2.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: minimist "^1.2.5" jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.1.0.tgz?cache=0&sync_timestamp=1604164898625&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4= + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0: +jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsprim@^1.2.2: version "1.4.1" - resolved "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" @@ -5118,223 +4622,190 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +just-diff-apply@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.0.0.tgz#a77348d24f0694e378b57293dceb65bdf5a91c4f" + integrity sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w== + +just-diff@^3.0.1: + version "3.1.1" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz#d50c597c6fd4776495308c63bdee1b6839082647" + integrity sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" - resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" - resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" - resolved "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz?cache=0&sync_timestamp=1601440395620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkleur%2Fdownload%2Fkleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4= - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/lazy-property/download/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== lcov-parse@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/lcov-parse/download/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + resolved "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= leven@^3.1.0: version "3.1.0" - resolved "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I= + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.4.1: version "0.4.1" - resolved "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha1-rkViwAdHO5MqYgDUAyaN0v/8at4= + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" levn@~0.3.0: version "0.3.0" - resolved "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -libcipm@^4.0.8: - version "4.0.8" - resolved "https://registry.npm.taobao.org/libcipm/download/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" - integrity sha1-3OpJGeEN+85CAyfmOQFhO5FBvIk= - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.1" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - graceful-fs "^4.1.11" - ini "^1.3.5" - lock-verify "^2.1.0" - mkdirp "^0.5.1" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - pacote "^9.1.0" - read-package-json "^2.0.13" - rimraf "^2.6.2" - worker-farm "^1.6.0" - -libnpm@^3.0.1: - version "3.0.1" - resolved "https://registry.npm.taobao.org/libnpm/download/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" - integrity sha1-C+EbTJ3U0f/X2Vx4bpLlXWW+d6I= - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.3" - find-npm-prefix "^1.0.2" - libnpmaccess "^3.0.2" - libnpmconfig "^1.2.1" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmpublish "^1.1.2" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - lock-verify "^2.0.2" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - npm-profile "^4.0.2" - npm-registry-fetch "^4.0.0" - npmlog "^4.1.2" - pacote "^9.5.3" - read-package-json "^2.0.13" - stringify-package "^1.0.0" - -libnpmaccess@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/libnpmaccess/download/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" - integrity sha1-iy1yNFujvvkNO09pTt1cBBf1iSM= +libnpmaccess@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.2.tgz#781832fb7ccb867b26343a75a85ad9c43e50406e" + integrity sha512-avXtJibZuGap0/qADDYqb9zdpgzVu/yG5+tl2sTRa7MCkDNv2ZlGwCYI0r6/+tmqXPj0iB9fKexHz426vB326w== dependencies: aproba "^2.0.0" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" + minipass "^3.1.1" + npm-package-arg "^8.1.2" + npm-registry-fetch "^10.0.0" -libnpmconfig@^1.2.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/libnpmconfig/download/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" - integrity sha1-wML3k6dOZ9SCXlA556AqAETfy8A= +libnpmdiff@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" + integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== dependencies: - figgy-pudding "^3.5.1" - find-up "^3.0.0" - ini "^1.3.5" + "@npmcli/disparity-colors" "^1.0.1" + "@npmcli/installed-package-contents" "^1.0.7" + binary-extensions "^2.2.0" + diff "^5.0.0" + minimatch "^3.0.4" + npm-package-arg "^8.1.1" + pacote "^11.3.0" + tar "^6.1.0" -libnpmhook@^5.0.3: - version "5.0.3" - resolved "https://registry.npm.taobao.org/libnpmhook/download/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" - integrity sha1-QCDA9e2/COvjlTJcql6gGIW5KPc= +libnpmexec@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/libnpmexec/-/libnpmexec-1.1.0.tgz#daa79d4545e21d0eb6887a33e0bbc8ab466099b2" + integrity sha512-OWpsPWtD6CAn66JouyjBfhQ9eS1mAtXgZXXd1SoAyUP3Mol+ao9IJ2THcJQcgX96keVmZkUA11uJS5ZNEd9DwA== dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" + "@npmcli/arborist" "^2.3.0" + "@npmcli/ci-detect" "^1.3.0" + "@npmcli/run-script" "^1.8.4" + chalk "^4.1.0" + mkdirp-infer-owner "^2.0.0" + npm-package-arg "^8.1.2" + pacote "^11.3.1" + proc-log "^1.0.0" + read "^1.0.7" + read-package-json-fast "^2.0.2" + walk-up-path "^1.0.0" + +libnpmfund@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/libnpmfund/-/libnpmfund-1.0.2.tgz#d9552d4b76dd7f0a1a61b7af6b8f27184e51b0f5" + integrity sha512-Scw2JiLxfT7wqW/VbxIXV8u3FaFT/ZlR8YLFgTdCPsL1Hhli0554ZXyP8JTu1sLeDpHsoqtgLb4mgYVQnqigjA== + dependencies: + "@npmcli/arborist" "^2.0.0" -libnpmorg@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/libnpmorg/download/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" - integrity sha1-XSUD9s61fzPb3McY5mmP6m1a0Ic= +libnpmhook@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/libnpmhook/-/libnpmhook-6.0.2.tgz#4a7ad17d7c0f7e0d0e4268c443147938f6bfc534" + integrity sha512-fTw+8i6iyz9v6azSvQEVYxQhAaE2X1eiVMAUqsiwECWeylyc5KUoghHyYg0Kz5jEy9IOTaWYJXc6gMf0rQFpow== dependencies: aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" + npm-registry-fetch "^10.0.0" -libnpmpublish@^1.1.2: - version "1.1.3" - resolved "https://registry.npm.taobao.org/libnpmpublish/download/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" - integrity sha1-43gnlnItee7xoKIpRMEX4MTKQoA= +libnpmorg@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/libnpmorg/-/libnpmorg-2.0.2.tgz#395344d6b43c0b63a7b03f9e29c191144c0dd7f9" + integrity sha512-FY5Mzd2CblVqLWwhEIuefzdWwZOxYN1Vvk8KnXxrPhXHDijuQqaN9wgxZlsHwdGC02kPoDKkg67mH/ir/W/YLQ== dependencies: aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" - semver "^5.5.1" - ssri "^6.0.1" + npm-registry-fetch "^10.0.0" -libnpmsearch@^2.0.2: - version "2.0.2" - resolved "https://registry.npm.taobao.org/libnpmsearch/download/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" - integrity sha1-mk8FkQLTjj3UQIW9v+UJXypQRM8= +libnpmpack@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" + integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== dependencies: - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" + "@npmcli/run-script" "^1.8.3" + npm-package-arg "^8.1.0" + pacote "^11.2.6" -libnpmteam@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/libnpmteam/download/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" - integrity sha1-i0i8u2znDdgVDJUPy9vz/rbuyCA= +libnpmpublish@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.1.tgz#08ca2cbb5d7f6be1ce4f3f9c49b3822682bcf166" + integrity sha512-hZCrZ8v4G9YH3DxpIyBdob25ijD5v5LNzRbwsej4pPDopjdcLLj1Widl+BUeFa7D0ble1JYL4F3owjLJqiA8yA== + dependencies: + normalize-package-data "^3.0.2" + npm-package-arg "^8.1.2" + npm-registry-fetch "^10.0.0" + semver "^7.1.3" + ssri "^8.0.1" + +libnpmsearch@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-3.1.1.tgz#418ad6a2587b77b68222210f0a864a96d3841d57" + integrity sha512-XpJpsc7cg7+gdsC5IglXrPjeGzJh+GLhy8yLv4iKPhUFoe1s7dQvhsP5lN7YF0T98WwdEoMkKmbRJRCjEn3pEw== + dependencies: + npm-registry-fetch "^10.0.0" + +libnpmteam@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/libnpmteam/-/libnpmteam-2.0.3.tgz#dee3f113f9f8901ecbebb49ead13845874ed845d" + integrity sha512-bCNyYddHmvGEfxOYIk5WcdWHXHIygfAo5tmcGf19YyIG42igd0+CckpuXXJgtIAMZSTFhwskWx9YZ9CmWL94CA== dependencies: aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpx@^10.2.4: - version "10.2.4" - resolved "https://registry.npm.taobao.org/libnpx/download/libnpx-10.2.4.tgz?cache=0&sync_timestamp=1595265104817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flibnpx%2Fdownload%2Flibnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee" - integrity sha1-7w4yWOKa7y7H7jJ2EV4g5n9n1O4= - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^14.2.3" + npm-registry-fetch "^10.0.0" + +libnpmversion@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/libnpmversion/-/libnpmversion-1.2.0.tgz#e181eb7ab750003b7fd29a578c31e84bb91a67b9" + integrity sha512-0pfmobLZbOvq1cLIONZk8ISvEM1k3JdkNXWhMDZvUeH+ijBNvMVdPu/CPUr1eDFbNINS3b6R/0PbTIZDVz7thg== + dependencies: + "@npmcli/git" "^2.0.7" + "@npmcli/run-script" "^1.8.4" + json-parse-even-better-errors "^2.3.1" + semver "^7.3.5" + stringify-package "^1.0.1" lines-and-columns@^1.1.6: version "1.1.6" - resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= lint-staged@^8.1.7: version "8.2.1" - resolved "https://registry.npm.taobao.org/lint-staged/download/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" - integrity sha1-dS/PIi2dKPMjo7gPHmaPNlT/Ih8= + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" + integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A== dependencies: chalk "^2.3.1" commander "^2.14.1" @@ -5363,13 +4834,13 @@ lint-staged@^8.1.7: listr-silent-renderer@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/listr-silent-renderer/download/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + resolved "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= listr-update-renderer@^0.5.0: version "0.5.0" - resolved "https://registry.npm.taobao.org/listr-update-renderer/download/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha1-Tqg2hUinuK7LfgbYyVy0WuLt5qI= + resolved "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" @@ -5382,8 +4853,8 @@ listr-update-renderer@^0.5.0: listr-verbose-renderer@^0.5.0: version "0.5.0" - resolved "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha1-8RMhZ1NepMEmEQK58o2sfLoeA9s= + resolved "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== dependencies: chalk "^2.4.1" cli-cursor "^2.1.0" @@ -5392,8 +4863,8 @@ listr-verbose-renderer@^0.5.0: listr@^0.14.2: version "0.14.3" - resolved "https://registry.npm.taobao.org/listr/download/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha1-L+qQlgTkNL5GTFC926DUlpKPpYY= + resolved "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== dependencies: "@samverschueren/stream-to-observable" "^0.3.0" is-observable "^1.1.0" @@ -5405,19 +4876,9 @@ listr@^0.14.2: p-map "^2.0.0" rxjs "^6.3.3" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" @@ -5427,7 +4888,7 @@ load-json-file@^4.0.0: locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1597082033698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" @@ -5435,150 +4896,101 @@ locate-path@^2.0.0: locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1597082033698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1597082033698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" -lock-verify@^2.0.2, lock-verify@^2.1.0: - version "2.2.1" - resolved "https://registry.npm.taobao.org/lock-verify/download/lock-verify-2.2.1.tgz?cache=0&sync_timestamp=1600350999054&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flock-verify%2Fdownload%2Flock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1" - integrity sha1-gRB5SMUe0W+XuW/4tgZ1r/skP8E= - dependencies: - "@iarna/cli" "^1.2.0" - npm-package-arg "^6.1.0" - semver "^5.4.1" - -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/lockfile/download/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha1-B/gZ0lrkj4flOOZXi2lkpJgaVgk= - dependencies: - signal-exit "^3.0.2" - -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.npm.taobao.org/lodash._baseuniq/download/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.npm.taobao.org/lodash._createset/download/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= - -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.npm.taobao.org/lodash._root/download/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - lodash.capitalize@^4.2.1: version "4.2.1" - resolved "https://registry.npm.taobao.org/lodash.capitalize/download/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + resolved "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= -lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: +lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= lodash.escaperegexp@^4.1.2: version "4.1.2" - resolved "https://registry.npm.taobao.org/lodash.escaperegexp/download/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + lodash.ismatch@^4.4.0: version "4.4.0" - resolved "https://registry.npm.taobao.org/lodash.ismatch/download/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= lodash.map@^4.5.1: version "4.6.0" - resolved "https://registry.npm.taobao.org/lodash.map/download/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - lodash.toarray@^4.4.0: version "4.4.0" - resolved "https://registry.npm.taobao.org/lodash.toarray/download/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + resolved "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.npm.taobao.org/lodash.union/download/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@~4.5.0: - version "4.5.0" - resolved "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= lodash.uniqby@^4.7.0: version "4.7.0" - resolved "https://registry.npm.taobao.org/lodash.uniqby/download/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + resolved "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= - -lodash@4.x, lodash@^4.17.21: +lodash@4.x, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: - version "4.17.20" - resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597336147792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI= - log-driver@^1.2.7: version "1.2.7" - resolved "https://registry.npm.taobao.org/log-driver/download/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha1-Y7lQIfBwL+36LJuwok53l9cYcdg= + resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== log-symbols@^1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz?cache=0&sync_timestamp=1587898957951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= dependencies: chalk "^1.0.0" log-symbols@^2.2.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1587898957951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo= + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" log-update@^2.3.0: version "2.3.0" - resolved "https://registry.npm.taobao.org/log-update/download/log-update-2.3.0.tgz?cache=0&sync_timestamp=1582191690231&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-update%2Fdownload%2Flog-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + resolved "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= dependencies: ansi-escapes "^3.0.0" @@ -5587,43 +4999,16 @@ log-update@^2.3.0: longest@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/longest/download/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427569171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= - dependencies: - pify "^3.0.0" - make-dir@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -5633,51 +5018,55 @@ make-dir@^3.0.0: make-error@1.x: version "1.3.6" - resolved "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz?cache=0&sync_timestamp=1582106154960&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-error%2Fdownload%2Fmake-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha1-LrLjfqm2fEiR9oShOUeZr0hM96I= - -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-5.0.2.tgz?cache=0&sync_timestamp=1607473831765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha1-qoOHEE8mh+3KAchofuRQE9AtGb0= - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^8.0.14, make-fetch-happen@^8.0.9: + version "8.0.14" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" + integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.0.5" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" makeerror@1.0.x: version "1.0.11" - resolved "https://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: tmpl "1.0.x" map-cache@^0.2.2: version "0.2.2" - resolved "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" - integrity sha1-uRIhtUJzS58UJWwBMsiXxdclb9U= + version "4.2.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" + integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== map-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" @@ -5695,38 +5084,26 @@ marked-terminal@^4.1.1: supports-hyperlinks "^2.1.0" marked@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/marked/-/marked-2.0.1.tgz#5e7ed7009bfa5c95182e4eb696f85e948cefcee3" - integrity sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw== + version "2.0.3" + resolved "https://registry.npmjs.org/marked/-/marked-2.0.3.tgz#3551c4958c4da36897bda2a16812ef1399c8d6b0" + integrity sha512-5otztIIcJfPc2qGTN8cVtOJEjNJZ0jwa46INMagrYfk0EvqtRuEHLsEe0LrFS0/q+ZRKT0+kXK7P2T1AN5lWRA== matcher@^1.0.0: version "1.1.1" - resolved "https://registry.npm.taobao.org/matcher/download/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - integrity sha1-UdgwHhOPhAmCszixFrsMCa9iwcI= + resolved "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" + integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== dependencies: escape-string-regexp "^1.0.4" -meant@^1.0.2: - version "1.0.3" - resolved "https://registry.npm.taobao.org/meant/download/meant-1.0.3.tgz?cache=0&sync_timestamp=1605608237621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeant%2Fdownload%2Fmeant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" - integrity sha1-Z3aa+d4dFYdz6SiugsRWEUkDVUw= - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - memorystream@^0.3.1: version "0.3.1" - resolved "https://registry.npm.taobao.org/memorystream/download/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= meow@^8.0.0: version "8.1.2" - resolved "https://registry.npm.taobao.org/meow/download/meow-8.1.2.tgz?cache=0&sync_timestamp=1610076688294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmeow%2Fdownload%2Fmeow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha1-vL5FvaDuFynTUMA8/8g5WjbE6Jc= + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" @@ -5742,23 +5119,23 @@ meow@^8.0.0: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0: version "1.4.1" - resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== merge@^1.2.1: version "1.2.1" - resolved "https://registry.npm.taobao.org/merge/download/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU= + resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== micromatch@^3.0.4, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" - resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -5775,44 +5152,44 @@ micromatch@^3.0.4, micromatch@^3.1.4, micromatch@^3.1.8: to-regex "^3.0.2" micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk= + version "4.0.4" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.45.0.tgz?cache=0&sync_timestamp=1600831212519&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha1-zO7aIczXw6dF66LezVXUtz54eeo= +mime-db@1.47.0: + version "1.47.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.28" - resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.28.tgz?cache=0&sync_timestamp=1609560276293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha1-EWDEdX6rLFNjiI4AUnPs950qDs0= + version "2.1.30" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: - mime-db "1.45.0" + mime-db "1.47.0" mime@^2.4.3: - version "2.4.7" - resolved "https://registry.npm.taobao.org/mime/download/mime-2.4.7.tgz?cache=0&sync_timestamp=1608084044938&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" - integrity sha1-lirtm+DtGckf19wuzl1/TompDXQ= + version "2.5.2" + resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^1.0.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1596094012686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI= + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596094012686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/min-indent/download/min-indent-1.0.1.tgz?cache=0&sync_timestamp=1590693908857&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmin-indent%2Fdownload%2Fmin-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha1-pj9oFnOzBXH76LwlaGrnRu76mGk= + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@^3.0.4: version "3.0.4" @@ -5823,8 +5200,8 @@ minimatch@^3.0.4: minimist-options@4.1.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/minimist-options/download/minimist-options-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist-options%2Fdownload%2Fminimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk= + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" @@ -5832,101 +5209,129 @@ minimist-options@4.1.0: minimist@1.2.5, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY= +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" + minipass "^3.0.0" -minizlib@^1.2.1: +minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: version "1.3.3" - resolved "https://registry.npm.taobao.org/minizlib/download/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha1-IpDeloGKNMKVUcio0wEha9Zahh0= + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" + integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== dependencies: - minipass "^2.9.0" + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" mixin-deep@^1.2.0: version "1.3.2" - resolved "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY= + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.x: +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + +mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: +mkdirp@^0.5.1: version "0.5.5" - resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" modify-values@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/modify-values/download/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha1-s5OfpgVUZHTj4+PGPWS9Q7TuYCI= - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== mri@^1.1.5: version "1.1.6" - resolved "https://registry.npm.taobao.org/mri/download/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" - integrity sha1-SZUuEETbIdv5D2zZK8nJp3fUFaY= + resolved "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" + integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== ms@2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.2: version "2.1.2" - resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: version "2.1.3" - resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433988749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multimatch@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/multimatch/download/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" - integrity sha1-jDwPbj6ESa2grz3SnvtJGjdRkbM= + resolved "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== dependencies: "@types/minimatch" "^3.0.3" array-differ "^3.0.0" @@ -5936,18 +5341,18 @@ multimatch@^4.0.0: mute-stream@0.0.7: version "0.0.7" - resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= mute-stream@~0.0.4: version "0.0.8" - resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nanomatch@^1.2.9: version "1.2.13" - resolved "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -5963,70 +5368,60 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= neo-async@^2.6.0: version "2.6.2" - resolved "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317437265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8= + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nerf-dart@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/nerf-dart/download/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" + resolved "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" integrity sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-emoji@^1.10.0: version "1.10.0" - resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== dependencies: lodash.toarray "^4.4.0" -node-fetch-npm@^2.0.2: - version "2.0.4" - resolved "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" - integrity sha1-ZQfQ4XqewL477FFpWKSXzsVL9aQ= - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - node-fetch@^2.6.1: version "2.6.1" - resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-2.6.1.tgz?cache=0&sync_timestamp=1599309119313&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI= + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-gyp@^5.0.2, node-gyp@^5.1.0: - version "5.1.1" - resolved "https://registry.npm.taobao.org/node-gyp/download/node-gyp-5.1.1.tgz?cache=0&sync_timestamp=1602900896887&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-gyp%2Fdownload%2Fnode-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" - integrity sha1-65Ffe2Mck30oLjOu1Ey3oCX2Kj4= +node-gyp@^7.1.0, node-gyp@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" + graceful-fs "^4.2.3" + nopt "^5.0.0" npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= node-modules-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: @@ -6041,42 +5436,41 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.70: +node-releases@^1.1.71: version "1.1.71" resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== -nopt@^4.0.1, nopt@^4.0.3: - version "4.0.3" - resolved "https://registry.npm.taobao.org/nopt/download/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg= +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" - osenv "^0.1.4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg= + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" - integrity sha1-H4p8Qjs9LoXrNpher4HeOB0BMBo= +normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" + integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== dependencies: - hosted-git-info "^3.0.6" - resolve "^1.17.0" - semver "^7.3.2" + hosted-git-info "^4.0.1" + resolve "^1.20.0" + semver "^7.3.4" validate-npm-package-license "^3.0.1" normalize-path@^2.1.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" @@ -6086,123 +5480,97 @@ normalize-path@^3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^5.0.0: - version "5.3.0" - resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-5.3.0.tgz?cache=0&sync_timestamp=1602432879767&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-5.3.0.tgz#8959b3cdaa295b61592c1f245dded34b117618dd" - integrity sha1-iVmzzaopW2FZLB8kXd7TSxF2GN0= +normalize-url@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.0.tgz#688ba4251cc46350f5adf4e65e14b7113a752684" + integrity sha512-3nv3dKMucKPEXhx/FEtJQR26ksYdyVlLEP9/dYvYwCbLbP6H8ya94IRf+mB93ec+fndv/Ye8SylWfD7jmN6kSA== -npm-audit-report@^1.3.3: - version "1.3.3" - resolved "https://registry.npm.taobao.org/npm-audit-report/download/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" - integrity sha1-gibe6yU7VRdu0UdZKjmVRC8hee0= +npm-audit-report@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-2.1.4.tgz#b14c4625131fb7bcacc4b1c83842af1f58c92c98" + integrity sha512-Tz7rnfskSdZ0msTzt2mENC/B+H2QI8u0jN0ck7o3zDsQYIQrek/l3MjEc+CARer+64LsVTU6ZIqNuh0X55QPhw== dependencies: - cli-table3 "^0.5.0" - console-control-strings "^1.1.0" + chalk "^4.0.0" -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s= +npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/npm-cache-filename/download/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= - -npm-install-checks@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/npm-install-checks/download/npm-install-checks-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-install-checks%2Fdownload%2Fnpm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" - integrity sha1-qy4yrSe6pGcgcGkI5bFMGFLeRNk= - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.5: - version "3.1.5" - resolved "https://registry.npm.taobao.org/npm-lifecycle/download/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" - integrity sha1-mILTZCuMgsgVeCoS5qG/7tACYwk= +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-logical-tree@^1.2.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/npm-logical-tree/download/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" - integrity sha1-RGEBQcokZkytNdHmBxdhk/2PW4g= + semver "^7.1.1" npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI= + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: - version "6.1.1" - resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-6.1.1.tgz?cache=0&sync_timestamp=1602550521207&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-package-arg%2Fdownload%2Fnpm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha1-AhaMsKSaK3W/mIooaY3ntSnfXLc= +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2: + version "8.1.2" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz#b868016ae7de5619e729993fbd8d11dc3c52ab62" + integrity sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA== dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" + hosted-git-info "^4.0.1" + semver "^7.3.4" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.12, npm-packlist@^1.4.8: - version "1.4.8" - resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha1-Vu5swTW5+YrT1Rwcldoiu7my7z4= +npm-packlist@^2.1.4: + version "2.1.5" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.5.tgz#43ef5bbb9f59b7c0ef91e0905f1dd707b4cfb33c" + integrity sha512-KCfK3Vi2F+PH1klYauoQzg81GQ8/GGjQRKYY6tRnpQUPKTs/1gBZSRWtTEd7jGdSn1LZL7gpAmJT+BcS55k2XQ== dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" npm-path@^2.0.2: version "2.0.4" - resolved "https://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha1-xkE0el/51qCeTZvOVYDE9QUnjmQ= + resolved "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== dependencies: which "^1.2.10" -npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha1-9Nnl/UviFT5fTl+be+jcQZqZq7c= +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" + integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" + npm-install-checks "^4.0.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^8.1.2" + semver "^7.3.4" -npm-profile@^4.0.2, npm-profile@^4.0.4: - version "4.0.4" - resolved "https://registry.npm.taobao.org/npm-profile/download/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" - integrity sha1-KO6UOQ6TbfbQhCY+4gYTNqahWBs= - dependencies: - aproba "^1.1.2 || 2" - figgy-pudding "^3.4.1" - npm-registry-fetch "^4.0.0" - -npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: - version "4.0.7" - resolved "https://registry.npm.taobao.org/npm-registry-fetch/download/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" - integrity sha1-V5Ub9lQeAkazTJ+aOKtzYHyUSdc= - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.2.0" +npm-profile@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/npm-profile/-/npm-profile-5.0.3.tgz#d7f519002f477ebec925cd4b6c02287674f8b09c" + integrity sha512-fZbRtN7JyEPBkdr+xLlj0lQrNI42TKlw/3EvEB7OzrwiUNl4veHsu2u06N2MrF5EiQbNUuZ54156Qr1K4R+91w== + dependencies: + npm-registry-fetch "^10.0.0" + +npm-registry-fetch@^10.0.0, npm-registry-fetch@^10.1.1: + version "10.1.1" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-10.1.1.tgz#97bc7a0fca5e8f76cc5162185b8de8caa8bea639" + integrity sha512-F6a3l+ffCQ7hvvN16YG5bpm1rPZntCg66PLHDQ1apWJPOCUVHoKnL2w5fqEaTVhp42dmossTyXeR7hTGirfXrg== + dependencies: + lru-cache "^6.0.0" + make-fetch-happen "^8.0.9" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" npm-run-all@^4.1.5: version "4.1.5" - resolved "https://registry.npm.taobao.org/npm-run-all/download/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha1-BEdiAqFe4OLiFAgIYb/xKlHZj7o= + resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== dependencies: ansi-styles "^3.2.1" chalk "^2.4.1" @@ -6216,157 +5584,109 @@ npm-run-all@^4.1.5: npm-run-path@^2.0.0: version "2.0.2" - resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo= + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npm-user-validate@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/npm-user-validate/download/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" - integrity sha1-MUKPxUdf6EFgI/F4wKtHk1rYxWE= + resolved "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" + integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== npm-which@^3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/npm-which/download/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + resolved "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= dependencies: commander "^2.9.0" npm-path "^2.0.2" which "^1.2.10" -npm@^6.14.8, npm@^6.14.9: - version "6.14.11" - resolved "https://registry.npmjs.org/npm/-/npm-6.14.11.tgz#e0b5598d7b9a42d275e61d8bd28cd7eee0074a3b" - integrity sha512-1Zh7LjuIoEhIyjkBflSSGzfjuPQwDlghNloppjruOH5bmj9midT9qcNT0tRUZRR04shU9ekrxNy9+UTBrqeBpQ== +npm@^7.0.0: + version "7.11.2" + resolved "https://registry.npmjs.org/npm/-/npm-7.11.2.tgz#abd932492d3d11e5e4bc1306e935b874233f906b" + integrity sha512-NxcaNqAfdLEubG5dlPFWbXrVAG2zb45lB5y6W3PK1PK2feHaffpCN4rnXPD/BPp1kCJespCAv8Kw/QUYR85BRw== dependencies: - JSONStream "^1.3.5" + "@npmcli/arborist" "^2.4.1" + "@npmcli/ci-detect" "^1.2.0" + "@npmcli/config" "^2.2.0" + "@npmcli/run-script" "^1.8.5" abbrev "~1.1.1" ansicolors "~0.3.2" ansistyles "~0.1.3" - aproba "^2.0.0" archy "~1.0.0" - bin-links "^1.1.8" - bluebird "^3.5.5" - byte-size "^5.0.1" - cacache "^12.0.3" - call-limit "^1.1.1" - chownr "^1.1.4" - ci-info "^2.0.0" + byte-size "^7.0.1" + cacache "^15.0.6" + chalk "^4.1.0" + chownr "^2.0.0" cli-columns "^3.1.2" - cli-table3 "^0.5.1" - cmd-shim "^3.0.3" + cli-table3 "^0.6.0" columnify "~1.5.4" - config-chain "^1.1.12" - detect-indent "~5.0.0" - detect-newline "^2.1.0" - dezalgo "~1.0.3" - editor "~1.0.0" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.3.1" - glob "^7.1.6" - graceful-fs "^4.2.4" - has-unicode "~2.0.1" - hosted-git-info "^2.8.8" - iferr "^1.0.2" - infer-owner "^1.0.4" - inflight "~1.0.6" - inherits "^2.0.4" - ini "^1.3.8" - init-package-json "^1.10.3" - is-cidr "^3.0.0" - json-parse-better-errors "^1.0.2" - lazy-property "~1.0.0" - libcipm "^4.0.8" - libnpm "^3.0.1" - libnpmaccess "^3.0.2" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - libnpx "^10.2.4" - lock-verify "^2.1.0" - lockfile "^1.0.4" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "^5.1.1" - meant "^1.0.2" - mississippi "^3.0.0" - mkdirp "^0.5.5" - move-concurrently "^1.0.1" - node-gyp "^5.1.0" - nopt "^4.0.3" - normalize-package-data "^2.5.0" - npm-audit-report "^1.3.3" - npm-cache-filename "~1.0.2" - npm-install-checks "^3.0.2" - npm-lifecycle "^3.1.5" - npm-package-arg "^6.1.1" - npm-packlist "^1.4.8" - npm-pick-manifest "^3.0.2" - npm-profile "^4.0.4" - npm-registry-fetch "^4.0.7" + glob "^7.1.4" + graceful-fs "^4.2.6" + hosted-git-info "^4.0.2" + ini "^2.0.0" + init-package-json "^2.0.3" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + leven "^3.1.0" + libnpmaccess "^4.0.2" + libnpmdiff "^2.0.4" + libnpmexec "^1.0.1" + libnpmfund "^1.0.2" + libnpmhook "^6.0.2" + libnpmorg "^2.0.2" + libnpmpack "^2.0.1" + libnpmpublish "^4.0.1" + libnpmsearch "^3.1.1" + libnpmteam "^2.0.3" + libnpmversion "^1.2.0" + make-fetch-happen "^8.0.14" + minipass "^3.1.3" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^7.1.2" + nopt "^5.0.0" + npm-audit-report "^2.1.4" + npm-package-arg "^8.1.2" + npm-pick-manifest "^6.1.1" + npm-profile "^5.0.3" + npm-registry-fetch "^10.1.1" npm-user-validate "^1.0.1" npmlog "~4.1.2" - once "~1.4.0" opener "^1.5.2" - osenv "^0.1.5" - pacote "^9.5.12" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" + pacote "^11.3.3" + parse-conflict-json "^1.1.1" qrcode-terminal "^0.12.0" - query-string "^6.8.2" - qw "~1.0.1" read "~1.0.7" - read-cmd-shim "^1.0.5" - read-installed "~4.0.3" - read-package-json "^2.1.1" - read-package-tree "^5.3.1" - readable-stream "^3.6.0" + read-package-json "^3.0.1" + read-package-json-fast "^2.0.2" readdir-scoped-modules "^1.1.0" - request "^2.88.0" - retry "^0.12.0" - rimraf "^2.7.1" - safe-buffer "^5.1.2" - semver "^5.7.1" - sha "^3.0.0" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "^6.0.1" - stringify-package "^1.0.1" - tar "^4.4.13" + rimraf "^3.0.2" + semver "^7.3.5" + ssri "^8.0.1" + tar "^6.1.0" text-table "~0.2.0" tiny-relative-date "^1.3.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "^1.1.1" - unpipe "~1.0.0" - update-notifier "^2.5.0" - uuid "^3.3.3" - validate-npm-package-license "^3.0.4" + treeverse "^1.0.4" validate-npm-package-name "~3.0.0" - which "^1.3.1" - worker-farm "^1.7.0" - write-file-atomic "^2.4.3" + which "^2.0.2" + write-file-atomic "^3.0.3" npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" - resolved "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -6375,7 +5695,7 @@ npmlog@^4.1.2, npmlog@~4.1.2: number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.2.0: @@ -6385,96 +5705,87 @@ nwsapi@^2.2.0: oauth-sign@~0.9.0: version "0.9.0" - resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" - resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" - resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.8.0: - version "1.9.0" - resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.9.0.tgz?cache=0&sync_timestamp=1606804277230&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo= +object-inspect@^1.9.0: + version "1.10.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" + integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" -object.assign@^4.1.1: +object.assign@^4.1.2: version "4.1.2" - resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz?cache=0&sync_timestamp=1604115085770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA= + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: call-bind "^1.0.0" define-properties "^1.1.3" has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3: - version "2.1.1" - resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.1.tgz?cache=0&sync_timestamp=1606458133144&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" - integrity sha1-Df2o0QgHTZxWPoBJDIg7ZmEJFUQ= - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - object.pick@^1.3.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" - resolved "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1597005190531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005190531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" opener@^1.5.2: version "1.5.2" - resolved "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1598733439329&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopener%2Fdownload%2Fopener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha1-XTfh81B3udysQwE3InGv3rKhNZg= + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== optionator@^0.8.1: version "0.8.3" - resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU= + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.6" @@ -6485,8 +5796,8 @@ optionator@^0.8.1: optionator@^0.9.1: version "0.9.1" - resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk= + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" fast-levenshtein "^2.0.6" @@ -6495,211 +5806,161 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I= - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4, osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-each-series@^2.1.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/p-each-series/download/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha1-EFqwNXznKyAqiouUkzZyZXteKpo= + resolved "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-filter@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/p-filter/download/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" - integrity sha1-GxRyVirnoPdC8PPT03GOpm/5wJw= + resolved "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== dependencies: p-map "^2.0.0" p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-is-promise@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" - integrity sha1-WOeMff4uFjzyoE/4aefB26ZKWXE= + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1606288475631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1606288475631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-map@^1.1.1: version "1.2.0" - resolved "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s= + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-map@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= + resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-map@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/p-map/download/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs= + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-reduce@^2.0.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/p-reduce/download/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha1-CUCNpJUHxsJ0+qMfKN8zS8cStko= + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== p-retry@^4.0.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/p-retry/download/p-retry-4.2.0.tgz#ea9066c6b44f23cab4cd42f6147cdbbc6604da5d" - integrity sha1-6pBmxrRPI8q0zUL2FHzbvGYE2l0= + version "4.5.0" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz#6685336b3672f9ee8174d3769a660cb5e488521d" + integrity sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg== dependencies: "@types/retry" "^0.12.0" retry "^0.12.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= - -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: - version "9.5.12" - resolved "https://registry.npm.taobao.org/pacote/download/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" - integrity sha1-HhHdeo1za8w2s3WpgE1BuwN3v2Y= - dependencies: - bluebird "^3.5.3" - cacache "^12.0.2" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.3" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.3: + version "11.3.3" + resolved "https://registry.npmjs.org/pacote/-/pacote-11.3.3.tgz#d7d6091464f77c09691699df2ded13ab906b3e68" + integrity sha512-GQxBX+UcVZrrJRYMK2HoG+gPeSUX/rQhnbPkkGrCYa4n2F/bgClFPaMm0nsdnYrxnmUy85uMHoFXZ0jTD0drew== + dependencies: + "@npmcli/git" "^2.0.1" + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^1.8.2" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-normalize-package-bin "^1.0.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.12" - npm-pick-manifest "^3.0.0" - npm-registry-fetch "^4.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.2" - safe-buffer "^5.1.2" - semver "^5.6.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparallel-transform%2Fdownload%2Fparallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^2.1.4" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^10.0.0" + promise-retry "^2.0.1" + read-package-json-fast "^2.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.0" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598129273895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= +parse-conflict-json@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" + integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== dependencies: - error-ex "^1.2.0" + json-parse-even-better-errors "^2.3.0" + just-diff "^3.0.1" + just-diff-apply "^3.0.0" parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598129273895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz?cache=0&sync_timestamp=1598129273895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha1-+WCIzfJKj6qa6poAny2dlCyZlkY= + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" @@ -6708,7 +5969,7 @@ parse-json@^5.0.0: parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse5@6.0.1: @@ -6718,110 +5979,103 @@ parse5@6.0.1: pascalcase@^0.1.1: version "0.1.1" - resolved "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" - resolved "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-type@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha1-zvMdyOCho7sNEFwM2Xzzv0f0428= + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0= +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== pidtree@^0.3.0: version "0.3.1" - resolved "https://registry.npm.taobao.org/pidtree/download/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha1-7wmsLMBTPfHzJQzPLE02aw0SEUo= + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== pify@^2.0.0: version "2.3.0" - resolved "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pirates@^4.0.1: version "4.0.1" - resolved "https://registry.npm.taobao.org/pirates/download/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha1-ZDqSyviUVm+RsrmG0sZpUKji+4c= + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: node-modules-regexp "^1.0.0" pkg-conf@^2.1.0: version "2.1.0" - resolved "https://registry.npm.taobao.org/pkg-conf/download/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= dependencies: find-up "^2.0.0" @@ -6829,42 +6083,37 @@ pkg-conf@^2.1.0: pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: version "3.2.0" - resolved "https://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI= + resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== dependencies: semver-compare "^1.0.0" posix-character-classes@^0.1.0: version "0.1.1" - resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha1-3rxkidem5rDnYRiIzsiAM30xY5Y= + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s= + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" @@ -6895,144 +6144,111 @@ pretty-quick@^3.1.0: mri "^1.1.5" multimatch "^4.0.0" +proc-log@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz#0d927307401f69ed79341e83a0b2c9a13395eb77" + integrity sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg== + process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== progress@^2.0.0: version "2.0.3" - resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1, promise-inflight@~1.0.1: +promise-all-reject-late@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz?cache=0&sync_timestamp=1592142510714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpromise-retry%2Fdownload%2Fpromise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: - err-code "^1.0.0" - retry "^0.10.0" + err-code "^2.0.2" + retry "^0.12.0" prompts@^2.0.1: - version "2.3.2" - resolved "https://registry.npm.taobao.org/prompts/download/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" - integrity sha1-SAVy2J7POVZtK9P+LJ/Mt8TAsGg= + version "2.4.1" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== dependencies: kleur "^3.0.3" - sisteransi "^1.0.4" + sisteransi "^1.0.5" promzard@^0.3.0: version "0.3.0" - resolved "https://registry.npm.taobao.org/promzard/download/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: read "1" property-expr@^1.5.0: version "1.5.1" - resolved "https://registry.npm.taobao.org/property-expr/download/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha1-IuhwaJSgyOKNWHNYBPa6OjZzMU8= - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.npm.taobao.org/protoduck/download/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8= - dependencies: - genfun "^5.0.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + resolved "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" + integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== psl@^1.1.28, psl@^1.1.33: version "1.8.0" - resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" + resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pump@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz?cache=0&sync_timestamp=1569938104994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpumpify%2Fdownload%2Fpumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== q@^1.5.1: version "1.5.1" - resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qrcode-terminal@^0.12.0: version "0.12.0" - resolved "https://registry.npm.taobao.org/qrcode-terminal/download/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha1-u1tpnvf58FBQkqN0i+RGT+cbWBk= + resolved "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== qs@~6.5.2: version "6.5.2" - resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= + resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^6.8.2: - version "6.13.8" - resolved "https://registry.npm.taobao.org/query-string/download/query-string-6.13.8.tgz?cache=0&sync_timestamp=1609312670005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquery-string%2Fdownload%2Fquery-string-6.13.8.tgz#8cf231759c85484da3cf05a851810d8e825c1159" - integrity sha1-jPIxdZyFSE2jzwWoUYENjoJcEVk= - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha1-W4h48ROlgheEjGSCAmxz4bpXcn8= - -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/qw/download/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: +rc@^1.2.8: version "1.2.8" - resolved "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -7040,79 +6256,45 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: strip-json-comments "~2.0.1" react-is@^17.0.1: - version "17.0.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + version "17.0.2" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: - version "1.0.5" - resolved "https://registry.npm.taobao.org/read-cmd-shim/download/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha1-h+Q+ulAJi6WjLQzrWDq45DuWHBY= - dependencies: - graceful-fs "^4.1.2" +read-cmd-shim@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" + integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.npm.taobao.org/read-installed/download/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= +read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz#2dcb24d9e8dd50fb322042c8c35a954e6cc7ac9e" + integrity sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ== dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: - version "2.1.2" - resolved "https://registry.npm.taobao.org/read-package-json/download/read-package-json-2.1.2.tgz?cache=0&sync_timestamp=1602551832433&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-package-json%2Fdownload%2Fread-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" - integrity sha1-aZKytmxxdyWf646qxzw6zSi5Iio= +read-package-json@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz#c7108f0b9390257b08c21e3004d2404c806744b9" + integrity sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng== dependencies: glob "^7.1.1" json-parse-even-better-errors "^2.3.0" - normalize-package-data "^2.0.0" + normalize-package-data "^3.0.0" npm-normalize-package-bin "^1.0.0" -read-package-tree@^5.3.1: - version "5.3.1" - resolved "https://registry.npm.taobao.org/read-package-tree/download/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha1-oyy2TH8x64pvMe8G+c7fdAaP5jY= - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc= + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read-pkg@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" @@ -7121,25 +6303,34 @@ read-pkg@^3.0.0: read-pkg@^5.0.0, read-pkg@^5.1.1, read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w= + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" normalize-package-data "^2.5.0" parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@~1.0.1, read@~1.0.7: +read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: version "1.0.7" - resolved "https://registry.npm.taobao.org/read/download/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@3, readable-stream@^3.0.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@~2.3.6: version "2.3.7" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -7149,29 +6340,10 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@3, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.1.10: - version "1.1.14" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha1-jUVAe0+HCg3K68DihnDRjnRRQwk= + resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -7180,78 +6352,63 @@ readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: redent@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/redent/download/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8= + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" strip-indent "^3.0.0" redeyed@~2.1.0: version "2.1.1" - resolved "https://registry.npm.taobao.org/redeyed/download/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + resolved "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= dependencies: esprima "~4.0.0" regenerator-runtime@^0.13.4: version "0.13.7" - resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456117883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha1-ysLazIoepnX+qrrriugziYrkb1U= + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" - resolved "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" regexpp@^3.0.0, regexpp@^3.1.0: version "3.1.0" - resolved "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI= - -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.4.0.tgz?cache=0&sync_timestamp=1605012436264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha1-10RoFUM/XV7WQxzV3KIQSPZrOX4= - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== registry-auth-token@^4.0.0: version "4.2.1" - resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-4.2.1.tgz?cache=0&sync_timestamp=1605012436264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregistry-auth-token%2Fdownload%2Fregistry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha1-bXtABkQZGJcszV/tzUHcMix5slA= + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== dependencies: rc "^1.2.8" -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - remove-trailing-separator@^1.0.1: version "1.1.0" - resolved "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4= + version "1.1.4" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" - resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= request-promise-core@1.1.4: version "1.1.4" - resolved "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz?cache=0&sync_timestamp=1595378690362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-core%2Fdownload%2Frequest-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8= + resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== dependencies: lodash "^4.17.19" @@ -7264,10 +6421,10 @@ request-promise-native@^1.0.9: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.0, request@^2.88.2: +request@^2.88.2: version "2.88.2" - resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -7292,7 +6449,7 @@ request@^2.88.0, request@^2.88.2: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-from-string@^2.0.2: @@ -7300,15 +6457,10 @@ require-from-string@^2.0.2: resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-cwd@^3.0.0: version "3.0.0" @@ -7319,7 +6471,7 @@ resolve-cwd@^3.0.0: resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/resolve-dir/download/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= dependencies: expand-tilde "^2.0.0" @@ -7327,40 +6479,32 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: resolve-from@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-global@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/resolve-global/download/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" - integrity sha1-oqed9K8so/Sb93753azTItrRklU= + resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== dependencies: global-dirs "^0.1.1" resolve-url@^0.2.1: version "0.2.1" - resolved "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz?cache=0&sync_timestamp=1585438700247&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-url%2Fdownload%2Fresolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.17.0: - version "1.19.0" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw= - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - -resolve@^1.18.1: +resolve@^1.10.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2: version "1.20.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -7368,16 +6512,9 @@ resolve@^1.18.1: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha1-sllBtUloIxzC0bt2p5y38sC/hEQ= - dependencies: - path-parse "^1.0.6" - restore-cursor@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" @@ -7385,28 +6522,23 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" - resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= - -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.12.0: version "0.12.0" - resolved "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.2.8: version "2.7.1" - resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" @@ -7419,64 +6551,59 @@ rimraf@^3.0.0, rimraf@^3.0.2: rsvp@^4.8.4: version "4.8.5" - resolved "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ= + resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.2.0: version "2.4.1" - resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz?cache=0&sync_timestamp=1587966119578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-async%2Fdownload%2Frun-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-node@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/run-node/download/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha1-RrULlGoqotSUeuHYhumFb9nKvl4= + resolved "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" + integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== run-parallel@^1.1.9: - version "1.1.10" - resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.10.tgz?cache=0&sync_timestamp=1603768406762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" - integrity sha1-YKUbKug2Y2yBN33xbLEHNRvNE+8= - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - aproba "^1.1.1" + queue-microtask "^1.2.2" rxjs@^6.3.3, rxjs@^6.4.0: - version "6.6.3" - resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.3.tgz?cache=0&sync_timestamp=1600896646394&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha1-jKhGNcTaqQDA05Z6buesYCce5VI= + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1589129010497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129010497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" - resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz?cache=0&sync_timestamp=1571687334026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-regex%2Fdownload%2Fsafe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^4.0.3: version "4.1.0" - resolved "https://registry.npm.taobao.org/sane/download/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha1-7Ygf2SJzOmxGG8GJ3CtsAG8//e0= + resolved "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== dependencies: "@cnakazawa/watch" "^1.0.3" anymatch "^2.0.0" @@ -7531,115 +6658,96 @@ semantic-release@^17.4.2: semver-compare@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - semver-diff@^3.1.1: version "3.1.1" - resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha1-Bfd85Z8yXgDicGr9Z7tQbdscoys= + resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== dependencies: semver "^6.3.0" semver-regex@^3.1.2: version "3.1.2" - resolved "https://registry.npm.taobao.org/semver-regex/download/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" - integrity sha1-NLTA02Hu8mLgcZnb7zFtDyqxGAc= + resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" + integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: version "5.7.1" - resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.1.2, semver@^7.3.2: - version "7.3.4" - resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc= +semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" semver@^6.0.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= - -semver@^7.2.1: - version "7.3.2" - resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg= + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1585774809732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.3" split-string "^3.0.1" -sha@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/sha/download/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" - integrity sha1-svL5CvaQwWo6g5pqbGgOpR/t0a4= - dependencies: - graceful-fs "^4.1.2" - shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: version "1.7.2" - resolved "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshell-quote%2Fdownload%2Fshell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I= + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== shellwords@^0.1.1: version "0.1.1" - resolved "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha1-1rkYHBpI05cyTISHHvvPxz/AZUs= + resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" - resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw= + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== signale@^1.2.1: version "1.4.0" - resolved "https://registry.npm.taobao.org/signale/download/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha1-xL5YMC+wJirAD8PYhqfBE3WQQvE= + resolved "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== dependencies: chalk "^2.3.2" figures "^2.0.0" @@ -7647,24 +6755,24 @@ signale@^1.2.1: simple-git@^1.85.0: version "1.132.0" - resolved "https://registry.npm.taobao.org/simple-git/download/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1" - integrity sha1-U6xMXsnnTjfC/UYeIzCfIvzfCbE= + resolved "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1" + integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg== dependencies: debug "^4.0.1" -sisteransi@^1.0.4: +sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@0.0.4: version "0.0.4" - resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= slice-ansi@^4.0.0: @@ -7676,20 +6784,15 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.npm.taobao.org/slide/download/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - smart-buffer@^4.1.0: version "4.1.0" - resolved "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha1-kWBcJdkWUvRmHqacz0XxszHKIbo= + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== snapdragon-node@^2.0.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -7697,15 +6800,15 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" - resolved "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -7716,39 +6819,27 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha1-PImR8xRbJ5nnDhG9X7yLGWMRY4Y= +socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== dependencies: - agent-base "~4.2.1" - socks "~2.3.2" + agent-base "6" + debug "4" + socks "^2.3.3" -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.npm.taobao.org/socks/download/socks-2.3.3.tgz?cache=0&sync_timestamp=1607055673562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha1-ARKfCl1TTSuJdxLtis6rfuZdeOM= +socks@^2.3.3: + version "2.6.1" + resolved "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" + integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== dependencies: - ip "1.1.5" + ip "^1.1.5" smart-buffer "^4.1.0" -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/sorted-object/download/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.npm.taobao.org/sorted-union-stream/download/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - source-map-resolve@^0.5.0: version "0.5.3" - resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" decode-uri-component "^0.2.0" @@ -7758,26 +6849,26 @@ source-map-resolve@^0.5.0: source-map-support@^0.5.6: version "0.5.19" - resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719517036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha1-qYti+G3K9PZzmWSMCFKRq56P7WE= + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" - resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: version "0.7.3" @@ -7786,77 +6877,72 @@ source-map@^0.7.3: spawn-error-forwarder@~1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/spawn-error-forwarder/download/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" + resolved "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" integrity sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= spdx-correct@^3.0.0: version "3.1.1" - resolved "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha1-3s6BrJweZxPl99G28X1Gj6U9iak= + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0= + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha1-z3D1BILu/cmOPOCmgz5KU87rpnk= + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: version "3.0.7" - resolved "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.7.tgz?cache=0&sync_timestamp=1606613263696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha1-6cGKQQ5e1+EkQqVJ+9ivp2cDjWU= - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/split-on-first/download/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha1-9hCv7uOxK84dDDBCXnY5i3gkml8= + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" - resolved "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/split2/download/split2-2.2.0.tgz?cache=0&sync_timestamp=1598086085653&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit2%2Fdownload%2Fsplit2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha1-GGsldbz4PoW30YRldWI47k7kJJM= +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: - through2 "^2.0.2" + readable-stream "^3.0.0" split2@~1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/split2/download/split2-1.0.0.tgz?cache=0&sync_timestamp=1598086085653&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsplit2%2Fdownload%2Fsplit2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" + resolved "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" integrity sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= dependencies: through2 "~2.0.0" split@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/split/download/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k= + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.16.1" - resolved "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha1-+2YcC+8ps520B2nuOfpwCT1vaHc= + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7868,12 +6954,12 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: - figgy-pudding "^3.5.1" + minipass "^3.1.1" stack-utils@^2.0.2: version "2.0.3" @@ -7884,12 +6970,12 @@ stack-utils@^2.0.2: staged-git-files@1.1.2: version "1.1.2" - resolved "https://registry.npm.taobao.org/staged-git-files/download/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - integrity sha1-QybTOIbcns+immGTv1EbqQpGRUs= + resolved "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" + integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== static-extend@^0.1.1: version "0.1.2" - resolved "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" @@ -7897,59 +6983,33 @@ static-extend@^0.1.1: stealthy-require@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-combiner2@~1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/stream-combiner2/download/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + resolved "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/stream-iterate/download/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147178936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0= - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - string-argv@^0.0.2: version "0.0.2" - resolved "https://registry.npm.taobao.org/string-argv/download/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= string-length@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" - integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" strip-ansi "^6.0.0" string-width@^1.0.1: version "1.0.2" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" @@ -7958,188 +7018,175 @@ string-width@^1.0.1: "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU= + version "4.2.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" string.prototype.padend@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/string.prototype.padend/download/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" - integrity sha1-3Aj1eoAQ3FwVNVAxj2fhOtu3KsM= + version "3.1.2" + resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" + integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.2" -string.prototype.trimend@^1.0.1: - version "1.0.3" - resolved "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" - integrity sha1-oivVPMpcfPRNfJ1ccyEYhz1s0Ys= +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.1: - version "1.0.3" - resolved "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.3.tgz?cache=0&sync_timestamp=1606008005667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" - integrity sha1-m0y1kOEjuzZWRAHVmCQpjeUP1ao= +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" stringify-object@^3.2.2: version "3.3.0" - resolved "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha1-cDBlrvyhkwDTzoivT1s5VtdVZik= + resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: get-own-enumerable-property-symbols "^3.0.0" is-obj "^1.0.1" is-regexp "^1.0.0" -stringify-package@^1.0.0, stringify-package@^1.0.1: +stringify-package@^1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/stringify-package/download/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" - integrity sha1-5ao2Q+f3TQ8oYoty89rVzs/DuoU= + resolved "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.1.0: version "5.2.0" - resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" strip-bom@4.0.0, strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg= + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/strip-indent/download/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha1-wy4c7pQLazQyx3G8LFS8znPNMAE= + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-json-comments@3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.0.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha1-hXE5dakfuHvxswXMp3OV5A0qZKc= + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567582667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611878833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1608035619713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1608035619713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha1-9mPfJSr183xdSbvX7u+p4Lnlnkc= + version "2.2.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" symbol-observable@^1.1.0: version "1.2.0" - resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz?cache=0&sync_timestamp=1601494689361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ= + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== symbol-tree@^3.2.4: version "3.2.4" @@ -8148,41 +7195,43 @@ symbol-tree@^3.2.4: synchronous-promise@^2.0.6: version "2.0.15" - resolved "https://registry.npm.taobao.org/synchronous-promise/download/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" - integrity sha1-B8oYIrneAAH1/3NZXz0IxPcg644= + resolved "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" + integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg== table@^6.0.4: - version "6.0.7" - resolved "https://registry.npmjs.org/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + version "6.6.0" + resolved "https://registry.npmjs.org/table/-/table-6.6.0.tgz#905654b79df98d9e9a973de1dd58682532c40e8e" + integrity sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg== dependencies: - ajv "^7.0.2" - lodash "^4.17.20" + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" + strip-ansi "^6.0.0" -tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: - version "4.4.13" - resolved "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU= - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" +tar@^6.0.2, tar@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" temp-dir@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/temp-dir/download/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha1-vekrBb3+sVFugEycAK1FF38xMh4= + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== tempy@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/tempy/download/tempy-1.0.0.tgz#4f192b3ee3328a2684d0e3fc5c491425395aab65" - integrity sha1-TxkrPuMyiiaE0OP8XEkUJTlaq2U= + version "1.0.1" + resolved "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" + integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== dependencies: del "^6.0.0" is-stream "^2.0.0" @@ -8190,13 +7239,6 @@ tempy@^1.0.0: type-fest "^0.16.0" unique-string "^2.0.0" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -8216,12 +7258,12 @@ test-exclude@^6.0.0: text-extensions@^1.0.0: version "1.9.0" - resolved "https://registry.npm.taobao.org/text-extensions/download/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY= + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" - resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= throat@^5.0.0: @@ -8229,63 +7271,58 @@ throat@^5.0.0: resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - through2@^4.0.0: version "4.0.2" - resolved "https://registry.npm.taobao.org/through2/download/through2-4.0.2.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha1-p846wqeosLlmyA58SfBITDsjl2Q= + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== dependencies: readable-stream "3" +through2@~2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" - resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - tiny-relative-date@^1.3.0: version "1.3.0" - resolved "https://registry.npm.taobao.org/tiny-relative-date/download/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha1-+giq1QHtcw8xzAQxgdmVw5qTXgc= + resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmpl@1.0.x: version "1.0.4" - resolved "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550296062&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" - resolved "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" - resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" @@ -8293,15 +7330,15 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" - resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -8310,13 +7347,13 @@ to-regex@^3.0.1, to-regex@^3.0.2: toposort@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + resolved "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" - resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584645751908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" punycode "^2.1.1" @@ -8339,23 +7376,28 @@ tr46@^2.0.2: traverse@~0.6.6: version "0.6.6" - resolved "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + resolved "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +treeverse@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" + integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== + trim-newlines@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha1-eXJjBKaomKqDc0JymNVMLuixyzA= + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== trim-off-newlines@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/trim-off-newlines/download/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= ts-jest@^26.5.3: - version "26.5.3" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.3.tgz#a6ee00ba547be3b09877550df40a1465d0295554" - integrity sha512-nBiiFGNvtujdLryU7MiMQh1iPmnZ/QvOskBbD2kURiI1MwqvxlxNnaAB/z9TbslMqCsSbu5BXvSSQPc5tvHGeA== + version "26.5.5" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.5.tgz#e40481b6ee4dd162626ba481a2be05fa57160ea5" + integrity sha512-7tP4m+silwt1NHqzNRAPjW1BswnAhopTdc2K3HEkRZjF0ZG2F/e/ypVH0xiZIMfItFtD3CX0XFbwPzp9fIEUVg== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -8369,14 +7411,14 @@ ts-jest@^26.5.3: yargs-parser "20.x" tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.14.0" - resolved "https://registry.npm.taobao.org/tslib/download/tslib-1.14.0.tgz?cache=0&sync_timestamp=1601998793819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.14.0.tgz#d624983f3e2c5e0b55307c3dd6c86acd737622c6" - integrity sha1-1iSYPz4sXgtVMHw91shqzXN2IsY= + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslint@^5.11.0: version "5.20.1" - resolved "https://registry.npm.taobao.org/tslint/download/tslint-5.20.1.tgz?cache=0&sync_timestamp=1600702773825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslint%2Fdownload%2Ftslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha1-5AHortoBUrxE3QfmFANPP4DGe30= + resolved "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" @@ -8394,40 +7436,40 @@ tslint@^5.11.0: tsutils@^2.29.0: version "2.29.0" - resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k= + resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: tslib "^1.8.1" tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha1-7XGZF/EcoN7lhicrKsSeAVot11k= + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz?cache=0&sync_timestamp=1585882977555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-check%2Fdownload%2Ftype-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE= + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" - resolved "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz?cache=0&sync_timestamp=1585882977555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-check%2Fdownload%2Ftype-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" @@ -8437,35 +7479,35 @@ type-detect@4.0.8: resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E= - type-fest@^0.16.0: version "0.16.0" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.16.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha1-MkC4kaeLDerpENvrhlU+VSoUiGA= + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== type-fest@^0.18.0: version "0.18.1" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.18.1.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha1-20vBUaSiz07r+a3V23VQjbbMhB8= + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1606468897926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -8474,35 +7516,30 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - typescript@^3.7.2: - version "3.9.7" - resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha1-mNYApevcOPQMsndSLxLcgA6eJfo= + version "3.9.9" + resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" + integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== uglify-js@^3.1.4: - version "3.12.4" - resolved "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.12.4.tgz?cache=0&sync_timestamp=1609477956924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.12.4.tgz#93de48bb76bb3ec0fc36563f871ba46e2ee5c7ee" - integrity sha1-k95Iu3a7PsD8NlY/hxukbi7lx+4= - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + version "3.13.5" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" + integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw== -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/umask/download/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" union-value@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc= + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -8511,136 +7548,79 @@ union-value@^1.0.0: unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - unique-string@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha1-OcZFH4GvsnSd4rIz4/fF6IQ72J0= + resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: crypto-random-string "^2.0.0" universal-user-agent@^6.0.0: version "6.0.0" - resolved "https://registry.npm.taobao.org/universal-user-agent/download/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha1-M4H4UDslHA2c0hvB3pOeyd9UgO4= + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" - resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/universalify/download/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha1-thodoXPoQ1sv48Z9Kbmt+FlL0W0= + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/universalify/download/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unset-value@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz?cache=0&sync_timestamp=1604277119140&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupdate-notifier%2Fdownload%2Fupdate-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814527552&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha1-qnFCYd55PoqCNHp7zJznTobyhgI= + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" - resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz?cache=0&sync_timestamp=1585438689517&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furix%2Fdownload%2Furix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-join@^4.0.0: version "4.0.1" - resolved "https://registry.npm.taobao.org/url-join/download/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha1-tkLiGiZGgI/6F4xMX9o5hE4Szec= - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" + resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== use@^3.1.0: version "3.1.1" - resolved "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.npm.taobao.org/util-extend/download/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= - -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/util-promisify/download/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2: version "3.4.0" - resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4= + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^8.3.0: version "8.3.2" @@ -8648,14 +7628,14 @@ uuid@^8.3.0: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz?cache=0&sync_timestamp=1590871780233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha1-VLw83UMxe8qR413K8wWxpyN950U= + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" - integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + version "7.1.1" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" + integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -8663,22 +7643,22 @@ v8-to-istanbul@^7.0.0: validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" verror@1.10.0: version "1.10.0" - resolved "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" @@ -8699,16 +7679,21 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + walker@^1.0.7, walker@~1.0.5: version "1.0.7" - resolved "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" wcwidth@^1.0.0: version "1.0.1" - resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" @@ -8735,90 +7720,70 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^8.0.0: - version "8.4.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" - integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" + integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== dependencies: - lodash.sortby "^4.7.0" + lodash "^4.7.0" tr46 "^2.0.2" webidl-conversions "^6.1.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" - resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.10, which@^1.2.14, which@^1.2.9: version "1.3.1" - resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.3" - resolved "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w= - dependencies: - string-width "^2.1.1" - word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" - resolved "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha1-YQY29rH3A4kb00dxzLF/uTtHB5w= + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -worker-farm@^1.6.0, worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -8842,16 +7807,7 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: - version "2.4.3" - resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE= - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -8862,19 +7818,14 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.4.4: - version "7.4.4" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" - integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + version "7.4.5" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" + integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== xml-name-validator@^3.0.0: version "3.0.0" - resolved "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo= + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xmlchars@^2.2.0: version "2.2.0" @@ -8883,57 +7834,34 @@ xmlchars@^2.2.0: xtend@~4.0.1: version "4.0.2" - resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.2.tgz?cache=0&sync_timestamp=1609798970194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha1-hckBvWRwznH8S7cjrSCbcPfyhpY= + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.1.tgz?cache=0&sync_timestamp=1609798970194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha1-jbK4PDHF11CZu4kLI/MJSJHiR9Q= + version "4.0.3" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.1.1" - resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: - version "1.10.0" - resolved "https://registry.npm.taobao.org/yaml/download/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha1-O1k63ZRIdgd9TWg/7gEIG9n/8x4= + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@20.x, yargs-parser@^20.2.2: +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.7" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha1-VHhq9AuCDcsvuAJbEbTWWddjI7M= - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -8942,35 +7870,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.3: - version "20.2.4" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ= - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= - dependencies: - camelcase "^4.1.0" - -yargs@^14.2.3: - version "14.2.3" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-14.2.3.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha1-Ghw+3O0a+yov6jNgS8bR2NaIpBQ= - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - yargs@^15.4.1: version "15.4.1" resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" @@ -9001,29 +7900,10 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz?cache=0&sync_timestamp=1607208396560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - yup@^0.27.0: version "0.27.0" - resolved "https://registry.npm.taobao.org/yup/download/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha1-+MsZjI590hJL7dwkV1cTKQlrBuc= + resolved "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" + integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== dependencies: "@babel/runtime" "^7.0.0" fn-name "~2.0.1" From 093a2a2b3c8ea2e3e334bd6cc5f218f16420f826 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 2 May 2021 20:23:03 +0800 Subject: [PATCH 443/497] chore: add license of node-ip Signed-off-by: Zxilly --- src/util/ip.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/util/ip.ts b/src/util/ip.ts index b15dca00..3f0975ca 100644 --- a/src/util/ip.ts +++ b/src/util/ip.ts @@ -1,5 +1,30 @@ // This is a minimal subset of node-ip for handling IPMatch // https://github.com/indutny/node-ip/blob/master/lib/ip.js +// +// ### License +// +// This software is licensed under the MIT License. +// +// Copyright Fedor Indutny, 2012. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. import { Buffer } from 'buffer'; From 6be1b06f2225bc906b2a0e215ff8635c6dd3422f Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 2 May 2021 20:57:01 +0800 Subject: [PATCH 444/497] fix: transfer from micromatch to picomatch (#264) * fix: transfer from micromatch to picomatch This will remove dependency on `node/utils` Signed-off-by: Zxilly * build: update yarn.lock Signed-off-by: Zxilly --- package.json | 4 ++-- src/util/builtinOperators.ts | 5 ++--- yarn.lock | 17 +++++------------ 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 0e5b85a1..3772abbe 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@semantic-release/release-notes-generator": "^9.0.2", "@types/jest": "^26.0.20", "@types/lodash": "^4.14.168", - "@types/micromatch": "^4.0.1", + "@types/picomatch": "^2.2.2", "@types/node": "^10.5.3", "@typescript-eslint/eslint-plugin": "^4.17.0", "@typescript-eslint/parser": "^4.17.0", @@ -53,7 +53,7 @@ "await-lock": "^2.0.1", "csv-parse": "^4.15.3", "expression-eval": "^2.0.0", - "micromatch": "^4.0.2" + "picomatch": "^2.2.3" }, "files": [ "lib", diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 6a5c6ae7..e8b4f571 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -14,7 +14,7 @@ import * as rbac from '../rbac'; import { ip } from './ip'; -import { isMatch } from 'micromatch'; +import * as picomatch from 'picomatch'; // regexMatch determines whether key1 matches the pattern of key2 in regular expression. function regexMatch(key1: string, key2: string): boolean { @@ -230,8 +230,7 @@ function ipMatchFunc(...args: any[]): boolean { * ``` */ function globMatch(string: string, pattern: string): boolean { - const ok = isMatch(string, pattern); - return ok; + return picomatch(pattern)(string); } // generateGFunction is the factory method of the g(_, _) function. diff --git a/yarn.lock b/yarn.lock index 8e177104..d29d8c6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -959,11 +959,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/braces@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" - integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== - "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -1008,13 +1003,6 @@ resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== -"@types/micromatch@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" - integrity sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw== - dependencies: - "@types/braces" "*" - "@types/minimatch@^3.0.3": version "3.0.4" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" @@ -1045,6 +1033,11 @@ resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/picomatch@^2.2.2": + version "2.2.2" + resolved "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.2.2.tgz#e0022f77aa64475ff20326e9ff9728aaae191503" + integrity sha512-XygLVvHxaFK0w9sDf7Mk1wrugM0ig44Y5Fb2NmQcvznPkEfENprS6GhXVoO3AGicbhkRrmu9J7Lu7FFKqkCS8g== + "@types/prettier@^2.0.0": version "2.2.3" resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" From c80332b1344f57b846dbb14c1bef624d3638a738 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 2 May 2021 12:59:11 +0000 Subject: [PATCH 445/497] chore(release): 5.6.2 [skip ci] ## [5.6.2](https://github.com/casbin/node-casbin/compare/v5.6.1...v5.6.2) (2021-05-02) ### Bug Fixes * transfer from micromatch to picomatch ([#264](https://github.com/casbin/node-casbin/issues/264)) ([6be1b06](https://github.com/casbin/node-casbin/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 498d4570..47560010 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.6.2](https://github.com/casbin/node-casbin/compare/v5.6.1...v5.6.2) (2021-05-02) + + +### Bug Fixes + +* transfer from micromatch to picomatch ([#264](https://github.com/casbin/node-casbin/issues/264)) ([6be1b06](https://github.com/casbin/node-casbin/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) + ## [5.6.1](https://github.com/casbin/node-casbin/compare/v5.6.0...v5.6.1) (2021-04-05) diff --git a/package.json b/package.json index 3772abbe..f47da136 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.6.1", + "version": "5.6.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 0fb6ae798ef692aaef890472421f980b58a4dfec Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 7 May 2021 14:51:53 +0800 Subject: [PATCH 446/497] fix: fix buildRoleLinks to isolate groups Signed-off-by: Zixuan Liu --- examples/rbac_g2_model.conf | 15 +++++++++++++++ examples/rbac_g2_policy.csv | 3 +++ src/coreEnforcer.ts | 10 ++++++---- src/model/model.ts | 13 ++++++++++--- test/enforcer.test.ts | 6 ++++++ 5 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 examples/rbac_g2_model.conf create mode 100644 examples/rbac_g2_policy.csv diff --git a/examples/rbac_g2_model.conf b/examples/rbac_g2_model.conf new file mode 100644 index 00000000..bf7e6d89 --- /dev/null +++ b/examples/rbac_g2_model.conf @@ -0,0 +1,15 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ +g2 = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) diff --git a/examples/rbac_g2_policy.csv b/examples/rbac_g2_policy.csv new file mode 100644 index 00000000..ea0e7e09 --- /dev/null +++ b/examples/rbac_g2_policy.csv @@ -0,0 +1,3 @@ +p, admin, data1, read + +g2, alice, admin diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 110503cb..3c07d26a 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -325,16 +325,18 @@ export class CoreEnforcer { * @param rules policies */ public async buildIncrementalRoleLinks(op: PolicyOp, ptype: string, rules: string[][]): Promise { - for (const rmKey of this.rmMap.keys()) { - await this.model.buildIncrementalRoleLinks(this.rmMap.get(rmKey), op, rmKey, ptype, rules); + let rm = this.rmMap.get(ptype); + if (!rm) { + rm = new DefaultRoleManager(10); + this.rmMap.set(ptype, rm); } + await this.model.buildIncrementalRoleLinks(rm, op, 'g', ptype, rules); } protected async buildRoleLinksInternal(): Promise { - // await this.model.buildRoleLinks(this.rmMap); for (const rm of this.rmMap.values()) { await rm.clear(); - await this.model.buildRoleLinks(rm); + await this.model.buildRoleLinks(this.rmMap); } } diff --git a/src/model/model.ts b/src/model/model.ts index 65fb50e0..60d03922 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -17,6 +17,7 @@ import * as util from '../util'; import { Config, ConfigInterface } from '../config'; import { Assertion } from './assertion'; import { getLogger, logPrint } from '../log'; +import { DefaultRoleManager } from '../rbac'; export const sectionNameMap: { [index: string]: string } = { r: 'request_definition', @@ -172,13 +173,19 @@ export class Model { } // buildRoleLinks initializes the roles in RBAC. - public async buildRoleLinks(rm: rbac.RoleManager): Promise { + public async buildRoleLinks(rmMap: Map): Promise { const astMap = this.model.get('g'); if (!astMap) { return; } - for (const value of astMap.values()) { - await value.buildRoleLinks(rm); + for (const key of astMap.keys()) { + const ast = astMap.get(key); + let rm = rmMap.get(key); + if (!rm) { + rm = new DefaultRoleManager(10); + rmMap.set(key, rm); + } + await ast?.buildRoleLinks(rm); } } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index b2bdfb0e..c0122d79 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -585,3 +585,9 @@ test('TestEnforceSync', async () => { testEnforceSync(e, 'alice', 'data1', 'read', false); }); + +test('Test RBAC G2', async () => { + const e = await newEnforcer('examples/rbac_g2_model.conf', 'examples/rbac_g2_policy.csv'); + expect(await e.enforce('alice', 'data1', 'read')).toBe(false); + expect(await e.enforce('admin', 'data1', 'read')).toBe(true); +}); From e5ca953ac9fb776a00a463040aa0884c3184b312 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 7 May 2021 07:25:38 +0000 Subject: [PATCH 447/497] chore(release): 5.6.3 [skip ci] ## [5.6.3](https://github.com/casbin/node-casbin/compare/v5.6.2...v5.6.3) (2021-05-07) ### Bug Fixes * fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/node-casbin/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47560010..20ced64e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.6.3](https://github.com/casbin/node-casbin/compare/v5.6.2...v5.6.3) (2021-05-07) + + +### Bug Fixes + +* fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/node-casbin/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) + ## [5.6.2](https://github.com/casbin/node-casbin/compare/v5.6.1...v5.6.2) (2021-05-02) diff --git a/package.json b/package.json index f47da136..cb733259 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.6.2", + "version": "5.6.3", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 762efd9d9766fbc8e95f9d5160413ed2a8c6ce88 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Fri, 14 May 2021 19:49:13 +0800 Subject: [PATCH 448/497] feat: add enforceEx() (#271) * feat: add enforceEx() Signed-off-by: Zxilly * fix: switch enforce internal to new API Signed-off-by: Zxilly * fix: fix enforceEx return type Signed-off-by: Zxilly --- src/coreEnforcer.ts | 46 ++++++++++++++++++++++++++++++++++++++++--- test/enforcer.test.ts | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 3 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 3c07d26a..dbc371d2 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -24,6 +24,8 @@ import { MatchingFunc } from './rbac'; type Matcher = ((context: any) => Promise) | ((context: any) => any); +type EnforceResult = Generator<(boolean | [boolean, string[]]) | Promise>; + /** * CoreEnforcer defines the core functionality of an enforcer. */ @@ -340,11 +342,13 @@ export class CoreEnforcer { } } - private *privateEnforce(asyncCompile = true, ...rvals: any[]): Generator> { + private *privateEnforce(asyncCompile = true, explain = false, ...rvals: any[]): EnforceResult { if (!this.enabled) { return true; } + let explainIndex = -1; + const functions: { [key: string]: any } = {}; this.fm.getFunctions().forEach((value: any, key: string) => { functions[key] = value; @@ -445,10 +449,13 @@ export class CoreEnforcer { const [res, done] = effectStream.pushEffect(eftRes); if (done) { + explainIndex = i; break; } } } else { + explainIndex = 0; + const parameters: { [key: string]: any } = {}; rTokens?.forEach((token, j): void => { @@ -487,6 +494,13 @@ export class CoreEnforcer { logPrint(reqStr); } + if (explain) { + if (explainIndex === -1) { + return [res, []]; + } + return [res, p?.policy[explainIndex]]; + } + return res; } @@ -501,7 +515,21 @@ export class CoreEnforcer { * @return whether to allow the request. */ public enforceSync(...rvals: any[]): boolean { - return generatorRunSync(this.privateEnforce(false, ...rvals)); + return generatorRunSync(this.privateEnforce(false, false, ...rvals)); + } + + /** + * If the matchers does not contain an asynchronous method, call it faster. + * + * enforceSync decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request and the reason rule. + */ + public enforceExSync(...rvals: any[]): [boolean, string[]] { + return generatorRunSync(this.privateEnforce(false, true, ...rvals)); } /** @@ -520,6 +548,18 @@ export class CoreEnforcer { * @return whether to allow the request. */ public async enforce(...rvals: any[]): Promise { - return generatorRunAsync(this.privateEnforce(true, ...rvals)); + return generatorRunAsync(this.privateEnforce(true, false, ...rvals)); + } + + /** + * enforce decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request and the reason rule. + */ + public async enforceEx(...rvals: any[]): Promise<[boolean, string[]]> { + return generatorRunAsync(this.privateEnforce(true, true, ...rvals)); } } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index c0122d79..4c59bc40 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -24,6 +24,14 @@ function testEnforceSync(e: Enforcer, sub: any, obj: string, act: string, res: b expect(e.enforceSync(sub, obj, act)).toBe(res); } +async function testEnforceEx(e: Enforcer, sub: any, obj: string, act: string, res: [boolean, string[]]): Promise { + await expect(e.enforceEx(sub, obj, act)).resolves.toEqual(res); +} + +function testEnforceExSync(e: Enforcer, sub: any, obj: string, act: string, res: [boolean, string[]]): void { + expect(e.enforceExSync(sub, obj, act)).toEqual(res); +} + async function testGetPolicy(e: Enforcer, res: string[][]): Promise { const myRes = await e.getPolicy(); console.log('Policy: ', myRes); @@ -586,6 +594,38 @@ test('TestEnforceSync', async () => { testEnforceSync(e, 'alice', 'data1', 'read', false); }); +test('TestEnforceEx', async () => { + const m = newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); + + const e = await newEnforcer(m); + + await e.addPermissionForUser('alice', 'data1', 'invalid'); + + testEnforceEx(e, 'alice', 'data1', 'read', [false, []]); + testEnforceEx(e, 'alice', 'data1', 'invalid', [true, ['alice', 'data1', 'invalid']]); +}); + +test('TestSyncEnforceEx', async () => { + const m = newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); + + const e = await newEnforcer(m); + + await e.addPermissionForUser('alice', 'data1', 'invalid'); + + testEnforceExSync(e, 'alice', 'data1', 'read', [false, []]); + testEnforceExSync(e, 'alice', 'data1', 'invalid', [true, ['alice', 'data1', 'invalid']]); +}); + test('Test RBAC G2', async () => { const e = await newEnforcer('examples/rbac_g2_model.conf', 'examples/rbac_g2_policy.csv'); expect(await e.enforce('alice', 'data1', 'read')).toBe(false); From a50ad826a15c1d791aaecbf7f922d69a3c3c1655 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 14 May 2021 11:51:31 +0000 Subject: [PATCH 449/497] chore(release): 5.7.0 [skip ci] # [5.7.0](https://github.com/casbin/node-casbin/compare/v5.6.3...v5.7.0) (2021-05-14) ### Features * add enforceEx() ([#271](https://github.com/casbin/node-casbin/issues/271)) ([762efd9](https://github.com/casbin/node-casbin/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20ced64e..12c9f0e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.7.0](https://github.com/casbin/node-casbin/compare/v5.6.3...v5.7.0) (2021-05-14) + + +### Features + +* add enforceEx() ([#271](https://github.com/casbin/node-casbin/issues/271)) ([762efd9](https://github.com/casbin/node-casbin/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) + ## [5.6.3](https://github.com/casbin/node-casbin/compare/v5.6.2...v5.6.3) (2021-05-07) diff --git a/package.json b/package.json index cb733259..86201a8b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.6.3", + "version": "5.7.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 0d5923998fa71648c8f77a23f67ffffac2a09343 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Wed, 19 May 2021 12:29:54 +0800 Subject: [PATCH 450/497] fix: `getImplicitPermissionsForUser` works with rmMap (#272) Signed-off-by: Zxilly --- src/coreEnforcer.ts | 7 +++++++ src/enforcer.ts | 16 +++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index dbc371d2..e9f0c4a3 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -129,6 +129,13 @@ export class CoreEnforcer { return this.rmMap.get('g'); } + /** + * getNamedRoleManager gets role manager by name. + */ + public getNamedRoleManager(name: string): RoleManager | undefined { + return this.rmMap.get(name); + } + /** * setEffector sets the current effector. * diff --git a/src/enforcer.ts b/src/enforcer.ts index 980f293b..67cb36a2 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -292,13 +292,15 @@ export class Enforcer extends ManagementEnforcer { const q = [name]; let n: string | undefined; while ((n = q.shift()) !== undefined) { - const role = await this.getRoleManager().getRoles(n, ...domain); - role.forEach((r) => { - if (!res.has(r)) { - res.add(r); - q.push(r); - } - }); + for (const rm of this.rmMap.values()) { + const role = await rm.getRoles(n, ...domain); + role.forEach((r) => { + if (!res.has(r)) { + res.add(r); + q.push(r); + } + }); + } } return Array.from(res); From e9633fee28c908e7f3d2a23b700bec6c1f936d7f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 19 May 2021 04:32:46 +0000 Subject: [PATCH 451/497] chore(release): 5.7.1 [skip ci] ## [5.7.1](https://github.com/casbin/node-casbin/compare/v5.7.0...v5.7.1) (2021-05-19) ### Bug Fixes * `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/node-casbin/issues/272)) ([0d59239](https://github.com/casbin/node-casbin/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12c9f0e6..a1b78265 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.7.1](https://github.com/casbin/node-casbin/compare/v5.7.0...v5.7.1) (2021-05-19) + + +### Bug Fixes + +* `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/node-casbin/issues/272)) ([0d59239](https://github.com/casbin/node-casbin/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) + # [5.7.0](https://github.com/casbin/node-casbin/compare/v5.6.3...v5.7.0) (2021-05-14) diff --git a/package.json b/package.json index 86201a8b..d747f724 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.7.0", + "version": "5.7.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From aa967f1e07d18e73639d65563f7b2d2f416d05c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 May 2021 22:04:44 +0000 Subject: [PATCH 452/497] chore(deps): bump ws from 7.4.5 to 7.4.6 Bumps [ws](https://github.com/websockets/ws) from 7.4.5 to 7.4.6. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/7.4.5...7.4.6) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d29d8c6c..df5cd0dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7811,9 +7811,9 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: typedarray-to-buffer "^3.1.5" ws@^7.4.4: - version "7.4.5" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== xml-name-validator@^3.0.0: version "3.0.0" From 263cd773224d91f9839c3f85406cd894b41a1aa3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jun 2021 01:48:39 +0000 Subject: [PATCH 453/497] chore(deps): bump normalize-url from 6.0.0 to 6.0.1 Bumps [normalize-url](https://github.com/sindresorhus/normalize-url) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/sindresorhus/normalize-url/releases) - [Commits](https://github.com/sindresorhus/normalize-url/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: normalize-url dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index df5cd0dc..85d55ca8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5474,9 +5474,9 @@ normalize-path@^3.0.0: integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.0.tgz#688ba4251cc46350f5adf4e65e14b7113a752684" - integrity sha512-3nv3dKMucKPEXhx/FEtJQR26ksYdyVlLEP9/dYvYwCbLbP6H8ya94IRf+mB93ec+fndv/Ye8SylWfD7jmN6kSA== + version "6.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.0.1.tgz#a4f27f58cf8c7b287b440b8a8201f42d0b00d256" + integrity sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ== npm-audit-report@^2.1.4: version "2.1.4" From d50edf240bcb3ab475e922b42abf299fb3dc456c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jun 2021 02:22:33 +0000 Subject: [PATCH 454/497] chore(deps): bump trim-newlines from 3.0.0 to 3.0.1 Bumps [trim-newlines](https://github.com/sindresorhus/trim-newlines) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/sindresorhus/trim-newlines/releases) - [Commits](https://github.com/sindresorhus/trim-newlines/commits) --- updated-dependencies: - dependency-name: trim-newlines dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 85d55ca8..babcaa9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7378,9 +7378,9 @@ treeverse@^1.0.4: integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== trim-newlines@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== trim-off-newlines@^1.0.0: version "1.0.1" From 72c2001ab064d190bfa5bcd305829d083eca52f7 Mon Sep 17 00:00:00 2001 From: MRGUOKING <420919469@qq.com> Date: Sat, 12 Jun 2021 18:09:27 +0800 Subject: [PATCH 455/497] fix: Support for loadIncrementalFilteredPolicy Signed-off-by: MRGUOKING <420919469@qq.com> Support for loadIncrementalFilteredPolicy Signed-off-by: MRGUOKING <420919469@qq.com> --- src/coreEnforcer.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index e9f0c4a3..f4ec298b 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -201,6 +201,16 @@ export class CoreEnforcer { public async loadFilteredPolicy(filter: any): Promise { this.model.clearPolicy(); + return this.loadIncrementalFilteredPolicy(filter); + } + + /** + * LoadIncrementalFilteredPolicy append a filtered policy from file/database. + * + * @param filter the filter used to specify which type of policy should be appended. + */ + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + public async loadIncrementalFilteredPolicy(filter: any): Promise { if ('isFiltered' in this.adapter) { await this.adapter.loadFilteredPolicy(this.model, filter); } else { From 839dbff9cfca8e9d566855ce7b76c00cba4e9e12 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 12 Jun 2021 14:00:09 +0000 Subject: [PATCH 456/497] chore(release): 5.7.2 [skip ci] ## [5.7.2](https://github.com/casbin/node-casbin/compare/v5.7.1...v5.7.2) (2021-06-12) ### Bug Fixes * Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/node-casbin/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1b78265..7cb15bc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.7.2](https://github.com/casbin/node-casbin/compare/v5.7.1...v5.7.2) (2021-06-12) + + +### Bug Fixes + +* Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/node-casbin/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) + ## [5.7.1](https://github.com/casbin/node-casbin/compare/v5.7.0...v5.7.1) (2021-05-19) diff --git a/package.json b/package.json index d747f724..647cdb12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.7.1", + "version": "5.7.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From a44c6a99ed36634a67e7888472e8f6d324b257f4 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 13 Jun 2021 16:57:58 +0800 Subject: [PATCH 457/497] feat: add support for `in` operator Signed-off-by: Zxilly --- examples/in_operator_model.conf | 11 +++++++++++ package.json | 2 +- src/coreEnforcer.ts | 8 +++++++- test/frontend.test.ts | 5 +++-- test/model.test.ts | 30 ++++++++++++++++++++++++++++++ yarn.lock | 8 ++++---- 6 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 examples/in_operator_model.conf diff --git a/examples/in_operator_model.conf b/examples/in_operator_model.conf new file mode 100644 index 00000000..452325cc --- /dev/null +++ b/examples/in_operator_model.conf @@ -0,0 +1,11 @@ +[request_definition] +r = sub, obj + +[policy_definition] +p = sub, obj, act + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = r.sub.Owner == r.obj.Owner && r.sub.Doc in(r.obj.Docs) diff --git a/package.json b/package.json index 647cdb12..e3aad066 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "dependencies": { "await-lock": "^2.0.1", "csv-parse": "^4.15.3", - "expression-eval": "^2.0.0", + "expression-eval": "^4.0.0", "picomatch": "^2.2.3" }, "files": [ diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index f4ec298b..19e2d217 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { compile, compileAsync } from 'expression-eval'; +import { compile, compileAsync, addBinaryOp } from 'expression-eval'; import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; @@ -48,6 +48,12 @@ export class CoreEnforcer { private getExpression(asyncCompile: boolean, exp: string): Matcher { const matcherKey = `${asyncCompile ? 'ASYNC[' : 'SYNC['}${exp}]`; + addBinaryOp('in', 1, (a, b) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + return (a in b) as number; + }); + let expression = this.matcherMap.get(matcherKey); if (!expression) { expression = asyncCompile ? compileAsync(exp) : compile(exp); diff --git a/test/frontend.test.ts b/test/frontend.test.ts index 3d2bc9a7..24a8a1c4 100644 --- a/test/frontend.test.ts +++ b/test/frontend.test.ts @@ -13,8 +13,8 @@ // limitations under the License. import { readFileSync } from 'fs'; -import { newEnforcer } from '../src/index'; -import { casbinJsGetPermissionForUser } from '../src/frontend'; +import { newEnforcer } from '../src'; +import { casbinJsGetPermissionForUser } from '../src'; test('TestCasbinJsGetPermissionForUser', async () => { const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); @@ -25,6 +25,7 @@ test('TestCasbinJsGetPermissionForUser', async () => { } const received = JSON.parse(await casbinJsGetPermissionForUser(e, 'alice')); const expectedModelStr = readFileSync('examples/rbac_model.conf').toString(); + // If you enable CR_LF auto transfer on Windows platform, this can lead to some unexpected behavior. expect(received['m']).toBe(expectedModelStr.replace(/\n\n/g, '\n')); const expectedPoliciesStr = readFileSync('examples/rbac_with_hierarchy_policy.csv').toString(); const expectedPolicyItem = expectedPoliciesStr.split(RegExp(',|\n')); diff --git a/test/model.test.ts b/test/model.test.ts index 60af91af..433f5f21 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -11,6 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +// noinspection JSMismatchedCollectionQueryUpdate import * as _ from 'lodash'; import { DefaultRoleManager, Enforcer, newEnforcer, newModel } from '../src'; @@ -418,3 +419,32 @@ test('TestAllMatchModel', async () => { await testDomainEnforce(e, 'alice', 'domain2', '/book/1', 'read', false); await testDomainEnforce(e, 'alice', 'domain2', '/book/1', 'write', true); }); + +test('ABACModelWithInOperator', async () => { + const e = await newEnforcer('examples/in_operator_model.conf'); + + class TestRule1 { + public Owner: string; + public Doc: number; + + constructor(Owner: string, Doc: number) { + this.Owner = Owner; + this.Doc = Doc; + } + } + + class TestRule2 { + public Owner: string; + public Docs: Array; + + constructor(Owner: string, Doc: Array) { + this.Owner = Owner; + this.Docs = Doc; + } + } + + const rule1 = new TestRule1('alice', 1); + const rule2 = new TestRule2('alice', [1, 2]); + + await expect(e.enforce(rule1, rule2)).resolves.toBe(true); +}); diff --git a/yarn.lock b/yarn.lock index babcaa9b..f9dce0cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2828,10 +2828,10 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -expression-eval@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/expression-eval/-/expression-eval-2.1.0.tgz#422915caa46140a7c5b5f248650dea8bf8236e62" - integrity sha512-FUJO/Akvl/JOWkvlqZaqbkhsEWlCJWDeZG4tzX96UH68D9FeRgYgtb55C2qtqbORC0Q6x5419EDjWu4IT9kQfg== +expression-eval@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/expression-eval/-/expression-eval-4.0.0.tgz#d6a07c93e8b33e635710419d4a595d9208b9cc5e" + integrity sha512-YHSnLTyIb9IKaho2IdQbvlei/pElxnGm48UgaXJ1Fe5au95Ck0R9ftm6rHJQuKw3FguZZ4eXVllJFFFc7LX0WQ== dependencies: jsep "^0.3.0" From ca519f7388386fbc63c58eb64a5a4e6fb20df87d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 14 Jun 2021 16:58:18 +0000 Subject: [PATCH 458/497] chore(release): 5.8.0 [skip ci] # [5.8.0](https://github.com/casbin/node-casbin/compare/v5.7.2...v5.8.0) (2021-06-14) ### Features * add support for `in` operator ([a44c6a9](https://github.com/casbin/node-casbin/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cb15bc9..d4066d74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.8.0](https://github.com/casbin/node-casbin/compare/v5.7.2...v5.8.0) (2021-06-14) + + +### Features + +* add support for `in` operator ([a44c6a9](https://github.com/casbin/node-casbin/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) + ## [5.7.2](https://github.com/casbin/node-casbin/compare/v5.7.1...v5.7.2) (2021-06-12) diff --git a/package.json b/package.json index e3aad066..d00a5a79 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.7.2", + "version": "5.8.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From bf39f1fec4afaed9ca76f9028cf292de8392890f Mon Sep 17 00:00:00 2001 From: Zxilly Date: Tue, 15 Jun 2021 10:31:22 +0800 Subject: [PATCH 459/497] build: adjusting for expression-eval 4 Signed-off-by: Zxilly --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 75561eae..ee1a6848 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,8 @@ "strict": true, "strictPropertyInitialization": false, "declaration": true, - "downlevelIteration": true + "downlevelIteration": true, + "allowSyntheticDefaultImports": true }, "include": ["src/**/*"] } From e858dcbab2351de038e2c5385bbfd20b7aa255ad Mon Sep 17 00:00:00 2001 From: Gabriel-403 <50576424+Gabriel-403@users.noreply.github.com> Date: Fri, 18 Jun 2021 01:39:24 -0500 Subject: [PATCH 460/497] feat: Add lazyload option at enforcer init method (#289) Signed-off-by: Gabriel-403 <1499015923@qq.com> --- src/enforcer.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/enforcer.ts b/src/enforcer.ts index 67cb36a2..fd0d280b 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -26,30 +26,33 @@ export class Enforcer extends ManagementEnforcer { * initWithFile initializes an enforcer with a model file and a policy file. * @param modelPath model file path * @param policyPath policy file path + * @param lazyLoad lazyLoad whether to load policy at initial time */ - public async initWithFile(modelPath: string, policyPath: string): Promise { + public async initWithFile(modelPath: string, policyPath: string, lazyLoad = false): Promise { const a = new FileAdapter(policyPath); - await this.initWithAdapter(modelPath, a); + await this.initWithAdapter(modelPath, a, lazyLoad); } /** * initWithFile initializes an enforcer with a model file and a policy file. * @param modelPath model file path * @param policyString policy CSV string + * @param lazyLoad whether to load policy at initial time */ - public async initWithString(modelPath: string, policyString: string): Promise { + public async initWithString(modelPath: string, policyString: string, lazyLoad = false): Promise { const a = new StringAdapter(policyString); - await this.initWithAdapter(modelPath, a); + await this.initWithAdapter(modelPath, a, lazyLoad); } /** * initWithAdapter initializes an enforcer with a database adapter. * @param modelPath model file path * @param adapter current adapter instance + * @param lazyLoad whether to load policy at initial time */ - public async initWithAdapter(modelPath: string, adapter: Adapter): Promise { + public async initWithAdapter(modelPath: string, adapter: Adapter, lazyLoad = false): Promise { const m = newModel(modelPath, ''); - await this.initWithModelAndAdapter(m, adapter); + await this.initWithModelAndAdapter(m, adapter, lazyLoad); this.modelPath = modelPath; } @@ -58,8 +61,9 @@ export class Enforcer extends ManagementEnforcer { * initWithModelAndAdapter initializes an enforcer with a model and a database adapter. * @param m model instance * @param adapter current adapter instance + * @param lazyLoad whether to load policy at initial time */ - public async initWithModelAndAdapter(m: Model, adapter?: Adapter): Promise { + public async initWithModelAndAdapter(m: Model, adapter?: Adapter, lazyLoad = false): Promise { if (adapter) { this.adapter = adapter; } @@ -67,7 +71,7 @@ export class Enforcer extends ManagementEnforcer { this.model = m; this.model.printModel(); - if (this.adapter) { + if (!lazyLoad && this.adapter) { await this.loadPolicy(); } } From 6f46f49769c428ed9b46c87e95c801699d4aa53e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 18 Jun 2021 06:41:31 +0000 Subject: [PATCH 461/497] chore(release): 5.9.0 [skip ci] # [5.9.0](https://github.com/casbin/node-casbin/compare/v5.8.0...v5.9.0) (2021-06-18) ### Features * Add lazyload option at enforcer init method ([#289](https://github.com/casbin/node-casbin/issues/289)) ([e858dcb](https://github.com/casbin/node-casbin/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4066d74..d148ae2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.9.0](https://github.com/casbin/node-casbin/compare/v5.8.0...v5.9.0) (2021-06-18) + + +### Features + +* Add lazyload option at enforcer init method ([#289](https://github.com/casbin/node-casbin/issues/289)) ([e858dcb](https://github.com/casbin/node-casbin/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) + # [5.8.0](https://github.com/casbin/node-casbin/compare/v5.7.2...v5.8.0) (2021-06-14) diff --git a/package.json b/package.json index d00a5a79..295f1745 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.8.0", + "version": "5.9.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 284d2a48cd67db8c197de24a99029858dbbe2da8 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Mon, 19 Jul 2021 23:21:55 +0800 Subject: [PATCH 462/497] feat: use new license format Signed-off-by: Zxilly --- package.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index 295f1745..85dd1b5a 100644 --- a/package.json +++ b/package.json @@ -64,12 +64,7 @@ "type": "git", "url": "https://github.com/casbin/node-casbin.git" }, - "licenses": [ - { - "type": "Apache-2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0" - } - ], + "license": "Apache-2.0", "husky": { "hooks": { "prepare-commit-msg": "exec < /dev/tty && git cz --hook || true", From b105da2662fcf9d34020ceaabcd7c7a9221ff95a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 19 Jul 2021 15:47:51 +0000 Subject: [PATCH 463/497] chore(release): 5.10.0 [skip ci] # [5.10.0](https://github.com/casbin/node-casbin/compare/v5.9.0...v5.10.0) (2021-07-19) ### Features * use new license format ([284d2a4](https://github.com/casbin/node-casbin/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d148ae2e..b9421d36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [5.10.0](https://github.com/casbin/node-casbin/compare/v5.9.0...v5.10.0) (2021-07-19) + + +### Features + +* use new license format ([284d2a4](https://github.com/casbin/node-casbin/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) + # [5.9.0](https://github.com/casbin/node-casbin/compare/v5.8.0...v5.9.0) (2021-06-18) diff --git a/package.json b/package.json index 85dd1b5a..0bbbe192 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin", - "version": "5.9.0", + "version": "5.10.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 0b26bf2c058539f613c767463e54401c164d4be7 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Wed, 21 Jul 2021 23:06:03 +0800 Subject: [PATCH 464/497] refactor: strip node-casbin to casbin.js Signed-off-by: Zxilly --- CHANGELOG.md | 409 -------------------------- README.md | 23 +- package.json | 22 +- src/config.ts | 17 +- src/coreEnforcer.ts | 8 +- src/enforcer.ts | 19 +- src/frontend.ts | 49 --- src/index.ts | 1 - src/internalEnforcer.ts | 6 +- src/model/model.ts | 13 +- src/persist/batchFileAdapter.ts | 17 -- src/persist/defaultFilteredAdapter.ts | 12 +- src/persist/fileAdapter.ts | 125 -------- src/persist/helper.ts | 19 +- src/persist/index.ts | 2 - src/persist/stringAdapter.ts | 2 +- src/util/builtinOperators.ts | 15 +- src/util/util.ts | 28 -- test/cachedEnforcer.test.ts | 3 +- test/config/config.test.ts | 3 +- test/enforcer.test.ts | 75 ++--- test/frontend.test.ts | 39 --- test/managementAPI.test.ts | 266 ++++++++--------- test/model.test.ts | 89 +++--- test/model/model.test.ts | 8 +- test/rbacAPI.test.ts | 26 +- test/utils.ts | 33 +++ tsconfig.json | 2 +- yarn.lock | 26 +- 29 files changed, 362 insertions(+), 995 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 src/frontend.ts delete mode 100644 src/persist/batchFileAdapter.ts delete mode 100644 src/persist/fileAdapter.ts delete mode 100644 test/frontend.test.ts create mode 100644 test/utils.ts diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index b9421d36..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,409 +0,0 @@ -# [5.10.0](https://github.com/casbin/node-casbin/compare/v5.9.0...v5.10.0) (2021-07-19) - - -### Features - -* use new license format ([284d2a4](https://github.com/casbin/node-casbin/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) - -# [5.9.0](https://github.com/casbin/node-casbin/compare/v5.8.0...v5.9.0) (2021-06-18) - - -### Features - -* Add lazyload option at enforcer init method ([#289](https://github.com/casbin/node-casbin/issues/289)) ([e858dcb](https://github.com/casbin/node-casbin/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) - -# [5.8.0](https://github.com/casbin/node-casbin/compare/v5.7.2...v5.8.0) (2021-06-14) - - -### Features - -* add support for `in` operator ([a44c6a9](https://github.com/casbin/node-casbin/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) - -## [5.7.2](https://github.com/casbin/node-casbin/compare/v5.7.1...v5.7.2) (2021-06-12) - - -### Bug Fixes - -* Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/node-casbin/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) - -## [5.7.1](https://github.com/casbin/node-casbin/compare/v5.7.0...v5.7.1) (2021-05-19) - - -### Bug Fixes - -* `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/node-casbin/issues/272)) ([0d59239](https://github.com/casbin/node-casbin/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) - -# [5.7.0](https://github.com/casbin/node-casbin/compare/v5.6.3...v5.7.0) (2021-05-14) - - -### Features - -* add enforceEx() ([#271](https://github.com/casbin/node-casbin/issues/271)) ([762efd9](https://github.com/casbin/node-casbin/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) - -## [5.6.3](https://github.com/casbin/node-casbin/compare/v5.6.2...v5.6.3) (2021-05-07) - - -### Bug Fixes - -* fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/node-casbin/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) - -## [5.6.2](https://github.com/casbin/node-casbin/compare/v5.6.1...v5.6.2) (2021-05-02) - - -### Bug Fixes - -* transfer from micromatch to picomatch ([#264](https://github.com/casbin/node-casbin/issues/264)) ([6be1b06](https://github.com/casbin/node-casbin/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) - -## [5.6.1](https://github.com/casbin/node-casbin/compare/v5.6.0...v5.6.1) (2021-04-05) - - -### Bug Fixes - -* fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/node-casbin/issues/251)) ([98c11f1](https://github.com/casbin/node-casbin/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) - -# [5.6.0](https://github.com/casbin/node-casbin/compare/v5.5.0...v5.6.0) (2021-03-23) - - -### Features - -* add priority_policy_explicit support ([#250](https://github.com/casbin/node-casbin/issues/250)) ([763c18e](https://github.com/casbin/node-casbin/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) - -# [5.5.0](https://github.com/casbin/node-casbin/compare/v5.4.2...v5.5.0) (2021-03-19) - - -### Bug Fixes - -* add missing await ([523ce85](https://github.com/casbin/node-casbin/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) -* fix errror type ([dc9e5b5](https://github.com/casbin/node-casbin/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) -* remove unused import ([2f8801c](https://github.com/casbin/node-casbin/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) - - -### Features - -* add initRmMap ([87f8011](https://github.com/casbin/node-casbin/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) -* add named addMatchingFunc ([65d3a26](https://github.com/casbin/node-casbin/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) -* add sync mode ([70e4e12](https://github.com/casbin/node-casbin/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) -* add unittest ([3cd5b73](https://github.com/casbin/node-casbin/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) - -## [5.4.2](https://github.com/casbin/node-casbin/compare/v5.4.1...v5.4.2) (2021-03-04) - - -### Bug Fixes - -* improve load policy line ([9f12511](https://github.com/casbin/node-casbin/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) - -## [5.4.1](https://github.com/casbin/node-casbin/compare/v5.4.0...v5.4.1) (2021-02-19) - - -### Bug Fixes - -* fix unexpected parser action ([3074fa9](https://github.com/casbin/node-casbin/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) - -# [5.4.0](https://github.com/casbin/node-casbin/compare/v5.3.1...v5.4.0) (2021-02-06) - - -### Features - -* add updatePolicy() ([#234](https://github.com/casbin/node-casbin/issues/234)) ([a3218f1](https://github.com/casbin/node-casbin/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/node-casbin/issues/235) - -## [5.3.1](https://github.com/casbin/node-casbin/compare/v5.3.0...v5.3.1) (2021-01-29) - - -### Bug Fixes - -* downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/node-casbin/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) - -# [5.3.0](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.3.0) (2021-01-28) - - -### Bug Fixes - -* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) -* update expression-eval ([95de296](https://github.com/casbin/node-casbin/commit/95de29650251af781d8638011dcc5cabeef2784c)) - - -### Features - -* enforceSync ([ff41f0a](https://github.com/casbin/node-casbin/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) - -## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) - - -### Bug Fixes - -* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) -* update expression-eval ([95de296](https://github.com/casbin/node-casbin/commit/95de29650251af781d8638011dcc5cabeef2784c)) - -## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2021-01-08) - - -### Bug Fixes - -* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) - -## [5.2.3](https://github.com/casbin/node-casbin/compare/v5.2.2...v5.2.3) (2020-12-19) - - -### Bug Fixes - -* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/node-casbin/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) - -## [5.2.2](https://github.com/casbin/node-casbin/compare/v5.2.1...v5.2.2) (2020-11-29) - - -### Bug Fixes - -* **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/node-casbin/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/node-casbin/issues/214) - -## [5.2.1](https://github.com/casbin/node-casbin/compare/v5.2.0...v5.2.1) (2020-11-15) - - -### Bug Fixes - -* **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/node-casbin/issues/211)) ([4f3ba65](https://github.com/casbin/node-casbin/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) - -# [5.2.0](https://github.com/casbin/node-casbin/compare/v5.1.6...v5.2.0) (2020-10-26) - - -### Features - -* changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/node-casbin/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) - -## [5.1.6](https://github.com/casbin/node-casbin/compare/v5.1.5...v5.1.6) (2020-10-07) - - -### Bug Fixes - -* support pattern function in 3rd args of g ([#199](https://github.com/casbin/node-casbin/issues/199)) ([27005f8](https://github.com/casbin/node-casbin/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) - -## [5.1.5](https://github.com/casbin/node-casbin/compare/v5.1.4...v5.1.5) (2020-09-14) - - -### Bug Fixes - -* ignore print model ([f426131](https://github.com/casbin/node-casbin/commit/f426131e752143251db6c11a7352d91d959cb503)) - -## [5.1.4](https://github.com/casbin/node-casbin/compare/v5.1.3...v5.1.4) (2020-09-10) - - -### Bug Fixes - -* add cache to generateGFunction ([e90bed2](https://github.com/casbin/node-casbin/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) - -## [5.1.3](https://github.com/casbin/node-casbin/compare/v5.1.2...v5.1.3) (2020-08-30) - - -### Bug Fixes - -* update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/node-casbin/issues/186)) ([6c277e8](https://github.com/casbin/node-casbin/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) - -## [5.1.2](https://github.com/casbin/node-casbin/compare/v5.1.1...v5.1.2) (2020-08-12) - - -### Bug Fixes - -* add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/node-casbin/commit/6e144fb9a895332245006ef3a28c47d022654895)) - -## [5.1.1](https://github.com/casbin/node-casbin/compare/v5.1.0...v5.1.1) (2020-08-12) - - -### Bug Fixes - -* add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/node-casbin/commit/a415838a514706af8a9399c899959bdb069619d4)) - -# [5.1.0](https://github.com/casbin/node-casbin/compare/v5.0.7...v5.1.0) (2020-08-11) - - -### Features - -* add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/node-casbin/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) - -## [5.0.6](https://github.com/casbin/node-casbin/compare/v5.0.5...v5.0.6) (2020-07-16) - - -### Bug Fixes - -* add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/node-casbin/commit/b85673432f8a150490fd5134797508ccd368b81f)) - -## [5.0.5](https://github.com/casbin/node-casbin/compare/v5.0.4...v5.0.5) (2020-07-08) - - -### Bug Fixes - -* improve tokens separator ([687e96f](https://github.com/casbin/node-casbin/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) - -## [5.0.4](https://github.com/casbin/node-casbin/compare/v5.0.3...v5.0.4) (2020-06-08) - -### Bug Fixes - -- remove lodash ([293a852](https://github.com/casbin/node-casbin/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) - -## [5.0.3](https://github.com/casbin/node-casbin/compare/v5.0.2...v5.0.3) (2020-05-27) - -### Bug Fixes - -- check adapter type ([a74314d](https://github.com/casbin/node-casbin/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) - -## [5.0.2](https://github.com/casbin/node-casbin/compare/v5.0.1...v5.0.2) (2020-05-25) - -### Bug Fixes - -- Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/node-casbin/commit/3804c3d76802614104016a011c07c11c54a94632)) -- Add tests for batch operations. ([e6ad7af](https://github.com/casbin/node-casbin/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) -- Merge conflicts. ([7179b17](https://github.com/casbin/node-casbin/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) - -## [5.0.1](https://github.com/casbin/node-casbin/compare/v5.0.0...v5.0.1) (2020-05-22) - -### Bug Fixes - -- support comments after expression ([c97cb26](https://github.com/casbin/node-casbin/commit/c97cb26441d79316960a0464e8d56918859d969c)) - -# [5.0.0](https://github.com/casbin/node-casbin/compare/v4.7.2...v5.0.0) (2020-05-18) - -### Features - -- add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/node-casbin/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) -- improve effector for improve performance ([57de7b2](https://github.com/casbin/node-casbin/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) - -### BREAKING CHANGES - -- **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] -- - provides a new interface for Effector - -## [4.7.2](https://github.com/casbin/node-casbin/compare/v4.7.1...v4.7.2) (2020-05-09) - -### Bug Fixes - -- stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/node-casbin/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) - -## [4.7.1](https://github.com/casbin/node-casbin/compare/v4.7.0...v4.7.1) (2020-05-08) - -### Bug Fixes - -- Add examples. ([5cf950a](https://github.com/casbin/node-casbin/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) -- Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/node-casbin/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) -- Added util functions and util tests. ([72918bc](https://github.com/casbin/node-casbin/commit/72918bc677e898251dd4375516c31254e79eb6b8)) -- compatible types ([58242a5](https://github.com/casbin/node-casbin/commit/58242a56f9f72b1a06e4901867f502b73674d640)) -- tests. ([4da5291](https://github.com/casbin/node-casbin/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) - -# [4.7.0](https://github.com/casbin/node-casbin/compare/v4.6.0...v4.7.0) (2020-05-03) - -### Features - -- add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/node-casbin/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) - -# [4.6.0](https://github.com/casbin/node-casbin/compare/v4.5.0...v4.6.0) (2020-05-02) - -# [4.5.0](https://github.com/casbin/node-casbin/compare/v4.4.0...v4.5.0) (2020-04-30) - -### Features - -- avoid miss initialize() ([1394e8d](https://github.com/casbin/node-casbin/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) - -# [4.4.0](https://github.com/casbin/node-casbin/compare/v4.3.1...v4.4.0) (2020-04-25) - -### Features - -- add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/node-casbin/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) - -## [4.3.1](https://github.com/casbin/node-casbin/compare/v4.3.0...v4.3.1) (2020-04-21) - -### Bug Fixes - -- improve update into adapter before model ([0e9ccc6](https://github.com/casbin/node-casbin/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) - -# [4.3.0](https://github.com/casbin/node-casbin/compare/v4.2.1...v4.3.0) (2020-04-20) - -### Features - -- controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/node-casbin/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) - -## [4.2.1](https://github.com/casbin/node-casbin/compare/v4.2.0...v4.2.1) (2020-04-05) - -### Bug Fixes - -- remove use spread operator with await in array ([6e4f876](https://github.com/casbin/node-casbin/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) - -# [4.2.0](https://github.com/casbin/node-casbin/compare/v4.1.1...v4.2.0) (2020-04-05) - -### Features - -- add glob pattern to built-in function ([8415fc2](https://github.com/casbin/node-casbin/commit/8415fc2648796d033c85771e27219bd32541982e)) - -## [4.1.1](https://github.com/casbin/node-casbin/compare/v4.1.0...v4.1.1) (2020-02-20) - -### Bug Fixes - -- **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/node-casbin/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/node-casbin/issues/118) - -# [4.1.0](https://github.com/casbin/node-casbin/compare/v4.0.0...v4.1.0) (2020-02-13) - -### Features - -- synchronized enforcer ([ecec514](https://github.com/casbin/node-casbin/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) - -# [4.0.0](https://github.com/casbin/node-casbin/compare/v3.1.0...v4.0.0) (2020-02-11) - -### improvement - -- convert all management_api to async function ([e9f4d38](https://github.com/casbin/node-casbin/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) - -### BREAKING CHANGES - -- see # - -# [3.1.0](https://github.com/casbin/node-casbin/compare/v3.0.9...v3.1.0) (2020-01-22) - -### Features - -- implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/node-casbin/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) - -## [3.0.9](https://github.com/casbin/node-casbin/compare/v3.0.8...v3.0.9) (2020-01-14) - -### Bug Fixes - -- getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/node-casbin/commit/584624c99eabca68fc790d66fc4737511d92b074)) - -## [3.0.8](https://github.com/casbin/node-casbin/compare/v3.0.7...v3.0.8) (2019-12-12) - -## [3.0.7](https://github.com/casbin/node-casbin/compare/v3.0.6...v3.0.7) (2019-11-18) - -## [3.0.6](https://github.com/casbin/node-casbin/compare/v3.0.5...v3.0.6) (2019-11-07) - -## [3.0.5](https://github.com/casbin/node-casbin/compare/v3.0.4...v3.0.5) (2019-10-29) - -## [3.0.3](https://github.com/casbin/node-casbin/compare/v3.0.2...v3.0.3) (2019-07-06) - -## [3.0.2](https://github.com/casbin/node-casbin/compare/v3.0.1...v3.0.2) (2019-07-06) - -## [3.0.1](https://github.com/casbin/node-casbin/compare/v3.0.0...v3.0.1) (2019-06-14) - -# [3.0.0](https://github.com/casbin/node-casbin/compare/v3.0.0-beta.1...v3.0.0) (2019-06-05) - -# [3.0.0-beta.1](https://github.com/casbin/node-casbin/compare/v2.0.3...v3.0.0-beta.1) (2019-04-29) - -## [2.0.3](https://github.com/casbin/node-casbin/compare/v2.0.1...v2.0.3) (2019-04-22) - -## [2.0.1](https://github.com/casbin/node-casbin/compare/v2.0.0...v2.0.1) (2019-02-08) - -# [2.0.0](https://github.com/casbin/node-casbin/compare/v1.1.9...v2.0.0) (2019-01-05) - -## [1.1.9](https://github.com/casbin/node-casbin/compare/v1.1.8...v1.1.9) (2018-12-20) - -## [1.1.8](https://github.com/casbin/node-casbin/compare/v1.1.7...v1.1.8) (2018-12-18) - -## [1.1.7](https://github.com/casbin/node-casbin/compare/v1.1.6...v1.1.7) (2018-12-14) - -## [1.1.6](https://github.com/casbin/node-casbin/compare/v1.1.5...v1.1.6) (2018-12-07) - -## [1.1.5](https://github.com/casbin/node-casbin/compare/v1.1.4...v1.1.5) (2018-11-02) - -## [1.1.4](https://github.com/casbin/node-casbin/compare/v1.1.2...v1.1.4) (2018-11-01) - -## [1.1.2](https://github.com/casbin/node-casbin/compare/v1.1.1...v1.1.2) (2018-08-27) - -## [1.1.1](https://github.com/casbin/node-casbin/compare/v1.1.0...v1.1.1) (2018-08-20) - -# [1.1.0](https://github.com/casbin/node-casbin/compare/v1.0.9...v1.1.0) (2018-08-17) - -## [1.0.5](https://github.com/casbin/node-casbin/compare/v1.0.0...v1.0.5) (2018-08-09) diff --git a/README.md b/README.md index c4e76535..2fcdb134 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -# Node-Casbin +# casbin.js [![NPM version][npm-image]][npm-url] [![NPM download][download-image]][download-url] [![install size](https://packagephobia.now.sh/badge?p=casbin)](https://packagephobia.now.sh/result?p=casbin) -[![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master) -[![GitHub Actions](https://github.com/casbin/node-casbin/workflows/main/badge.svg)](https://github.com/casbin/node-casbin/actions) -[![Coverage Status](https://coveralls.io/repos/github/casbin/node-casbin/badge.svg?branch=master)](https://coveralls.io/github/casbin/node-casbin?branch=master) -[![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest) +[![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-casbin.js-master) +[![GitHub Actions](https://github.com/casbin/casbin.js/workflows/main/badge.svg)](https://github.com/casbin/casbin.js/actions) +[![Coverage Status](https://coveralls.io/repos/github/casbin/casbin.js/badge.svg?branch=master)](https://coveralls.io/github/casbin/casbin.js?branch=master) +[![Release](https://img.shields.io/github/release/casbin/casbin.js.svg)](https://github.com/casbin/casbin.js/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) [npm-image]: https://img.shields.io/npm/v/casbin.svg?style=flat-square @@ -14,11 +14,11 @@ [download-image]: https://img.shields.io/npm/dm/casbin.svg?style=flat-square [download-url]: https://npmjs.org/package/casbin -**News**: still worry about how to write the correct `node-casbin` policy? [Casbin online editor](http://casbin.org/en/editor) is coming to help! +**News**: still worry about how to write the correct `casbin.js` policy? [Casbin online editor](http://casbin.org/en/editor) is coming to help! ![casbin Logo](casbin-logo.png) -`node-casbin` is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). +`casbin.js` is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). ## All the languages supported by Casbin: @@ -48,7 +48,7 @@ yarn add casbin ## Get started -New a `node-casbin` enforcer with a model file and a policy file, see [Model](#official-model) section for details: +New a `casbin.js` enforcer with a model file and a policy file, see [Model](#official-model) section for details: ```node.js // For Node.js: @@ -80,7 +80,7 @@ if (res) { } ``` -Besides the static policy file, `node-casbin` also provides API for permission management at run-time. +Besides the static policy file, `casbin.js` also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below: ```node.js @@ -115,7 +115,7 @@ https://casbin.org/docs/en/role-managers ## Contributors This project exists thanks to all the people who contribute. - + ## Backers @@ -146,6 +146,5 @@ This project is licensed under the [Apache 2.0 license](LICENSE). If you have any issues or feature requests, please contact us. PR is welcomed. -- https://github.com/casbin/node-casbin/issues -- hsluoyz@gmail.com +- https://github.com/casbin/casbin.js/issues - Tencent QQ group: [546057381](//shang.qq.com/wpa/qunwpa?idkey=8ac8b91fc97ace3d383d0035f7aa06f7d670fd8e8d4837347354a31c18fac885) diff --git a/package.json b/package.json index 0bbbe192..a7733d4d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "casbin", - "version": "5.10.0", - "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Node.JS", + "name": "casbin.js", + "version": "1.0.0", + "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", @@ -47,19 +47,25 @@ "semantic-release": "^17.4.2", "ts-jest": "^26.5.3", "tslint": "^5.11.0", - "typescript": "^3.7.2" + "typescript": "^4.3.5", + "picomatch": "^2.2.3", + "csv-parse": "^4.15.3", + "buffer": "^6.0.3" + }, + "peerDependencies": { + "picomatch": "^2.2.3", + "csv-parse": "^4.15.3", + "buffer": "^6.0.3" }, "dependencies": { "await-lock": "^2.0.1", - "csv-parse": "^4.15.3", - "expression-eval": "^4.0.0", - "picomatch": "^2.2.3" + "expression-eval": "^4.0.0" }, "files": [ "lib", "examples" ], - "homepage": "http://casbin.org", + "homepage": "https://casbin.org", "repository": { "type": "git", "url": "https://github.com/casbin/node-casbin.git" diff --git a/src/config.ts b/src/config.ts index 9c3319bc..63b283cb 100644 --- a/src/config.ts +++ b/src/config.ts @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import { readFileSync } from 'fs'; // ConfigInterface defines the behavior of a Config implementation export interface ConfigInterface { @@ -48,7 +47,7 @@ export class Config implements ConfigInterface { */ public static newConfig(confName: string): Config { const config = new Config(); - config.parse(confName); + config.parseText(confName); return config; } @@ -60,7 +59,7 @@ export class Config implements ConfigInterface { */ public static newConfigFromText(text: string): Config { const config = new Config(); - config.parseBuffer(Buffer.from(text)); + config.parseText(text); return config; } @@ -85,16 +84,8 @@ export class Config implements ConfigInterface { } } - private parse(path: string): void { - const buf = readFileSync(path); - this.parseBuffer(buf); - } - - private parseBuffer(buf: Buffer): void { - const lines = buf - .toString() - .split('\n') - .filter((v) => v); + private parseText(text: string): void { + const lines = text.split('\n').filter((v) => v); const linesCount = lines.length; let section = ''; let currentLine = ''; diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 19e2d217..a0243ef0 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -16,7 +16,7 @@ import { compile, compileAsync, addBinaryOp } from 'expression-eval'; import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; -import { Adapter, FilteredAdapter, Watcher, BatchAdapter, UpdatableAdapter } from './persist'; +import { Adapter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval, generatorRunSync, generatorRunAsync } from './util'; import { getLogger, logPrint } from './log'; @@ -36,7 +36,7 @@ export class CoreEnforcer { protected eft: Effector = new DefaultEffector(); private matcherMap: Map = new Map(); - protected adapter: UpdatableAdapter | FilteredAdapter | Adapter | BatchAdapter; + protected adapter: Adapter; protected watcher: Watcher | null = null; protected rmMap: Map = new Map([['g', new DefaultRoleManager(10)]]); @@ -218,7 +218,7 @@ export class CoreEnforcer { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types public async loadIncrementalFilteredPolicy(filter: any): Promise { if ('isFiltered' in this.adapter) { - await this.adapter.loadFilteredPolicy(this.model, filter); + await (this.adapter as FilteredAdapter).loadFilteredPolicy(this.model, filter); } else { throw new Error('filtered policies are not supported by this adapter'); } @@ -240,7 +240,7 @@ export class CoreEnforcer { */ public isFiltered(): boolean { if ('isFiltered' in this.adapter) { - return this.adapter.isFiltered(); + return (this.adapter as FilteredAdapter).isFiltered(); } return false; } diff --git a/src/enforcer.ts b/src/enforcer.ts index fd0d280b..46a9cf4c 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -14,7 +14,7 @@ import { ManagementEnforcer } from './managementEnforcer'; import { Model, newModel } from './model'; -import { Adapter, FileAdapter, StringAdapter } from './persist'; +import { Adapter, StringAdapter } from './persist'; import { getLogger } from './log'; import { arrayRemoveDuplicates } from './util'; @@ -22,17 +22,6 @@ import { arrayRemoveDuplicates } from './util'; * Enforcer = ManagementEnforcer + RBAC API. */ export class Enforcer extends ManagementEnforcer { - /** - * initWithFile initializes an enforcer with a model file and a policy file. - * @param modelPath model file path - * @param policyPath policy file path - * @param lazyLoad lazyLoad whether to load policy at initial time - */ - public async initWithFile(modelPath: string, policyPath: string, lazyLoad = false): Promise { - const a = new FileAdapter(policyPath); - await this.initWithAdapter(modelPath, a, lazyLoad); - } - /** * initWithFile initializes an enforcer with a model file and a policy file. * @param modelPath model file path @@ -382,7 +371,7 @@ export async function newEnforcerWithClass(enforcer: new () if (params.length - parsedParamLen === 2) { if (typeof params[0] === 'string') { if (typeof params[1] === 'string') { - await e.initWithFile(params[0].toString(), params[1].toString()); + await e.initWithString(params[0].toString(), params[1].toString()); } else { await e.initWithAdapter(params[0].toString(), params[1]); } @@ -395,12 +384,12 @@ export async function newEnforcerWithClass(enforcer: new () } } else if (params.length - parsedParamLen === 1) { if (typeof params[0] === 'string') { - await e.initWithFile(params[0], ''); + await e.initWithString(params[0], ''); } else { await e.initWithModelAndAdapter(params[0]); } } else if (params.length === parsedParamLen) { - await e.initWithFile('', ''); + await e.initWithString('', ''); } else { throw new Error('Invalid parameters for enforcer.'); } diff --git a/src/frontend.ts b/src/frontend.ts deleted file mode 100644 index ed754b7a..00000000 --- a/src/frontend.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2020 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import { Enforcer } from './enforcer'; -import { deepCopy } from './util'; - -/** - * Experiment! - * getPermissionForCasbinJs returns a string include the whole model. - * You can pass the returned string to the frontend and manage your webpage widgets and APIs with Casbin.js. - * @param e the initialized enforcer - * @param user the user - */ -export async function casbinJsGetPermissionForUser(e: Enforcer, user?: string): Promise { - const obj: any = {}; - - const m = e.getModel().model; - let s = ''; - s += '[request_definition]\n'; - s += `r = ${m.get('r')?.get('r')?.value.replace(/_/g, '.')}\n`; - s += '[policy_definition]\n'; - s += `p = ${m.get('p')?.get('p')?.value.replace(/_/g, '.')}\n`; - if (m.get('g')?.get('g') !== undefined) { - s += '[role_definition]\n'; - s += `g = ${m.get('g')?.get('g')?.value}\n`; - } - s += '[policy_effect]\n'; - s += `e = ${m.get('e')?.get('e')?.value.replace(/_/g, '.')}\n`; - s += '[matchers]\n'; - s += `m = ${m.get('m')?.get('m')?.value.replace(/_/g, '.')}`; - obj['m'] = s; - obj['p'] = deepCopy(await e.getPolicy()); - for (const arr of obj['p']) { - arr.splice(0, 0, 'p'); - } - - return JSON.stringify(obj); -} diff --git a/src/index.ts b/src/index.ts index 12ffde90..e451f21f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,5 +23,4 @@ export * from './model'; export * from './persist'; export * from './rbac'; export * from './log'; -export * from './frontend'; export { Util }; diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index 1d639792..b171a072 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -64,7 +64,7 @@ export class InternalEnforcer extends CoreEnforcer { if (this.autoSave) { if ('addPolicies' in this.adapter) { try { - await this.adapter.addPolicies(sec, ptype, rules); + await (this.adapter as BatchAdapter).addPolicies(sec, ptype, rules); } catch (e) { if (e.message !== 'not implemented') { throw e; @@ -98,7 +98,7 @@ export class InternalEnforcer extends CoreEnforcer { if (this.autoSave) { if ('updatePolicy' in this.adapter) { try { - await this.adapter.updatePolicy(sec, ptype, oldRule, newRule); + await (this.adapter as UpdatableAdapter).updatePolicy(sec, ptype, oldRule, newRule); } catch (e) { if (e.message !== 'not implemented') { throw e; @@ -165,7 +165,7 @@ export class InternalEnforcer extends CoreEnforcer { if (this.autoSave) { if ('removePolicies' in this.adapter) { try { - await this.adapter.removePolicies(sec, ptype, rules); + await (this.adapter as BatchAdapter).removePolicies(sec, ptype, rules); } catch (e) { if (e.message !== 'not implemented') { throw e; diff --git a/src/model/model.ts b/src/model/model.ts index 60d03922..b3d87640 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -52,7 +52,7 @@ export class Model { return this.addDef(sec, key, value); } - private getKeySuffix(i: number): string { + private static getKeySuffix(i: number): string { if (i === 1) { return ''; } @@ -63,7 +63,7 @@ export class Model { private loadSection(cfg: ConfigInterface, sec: string): void { let i = 1; for (;;) { - if (!this.loadAssertion(cfg, sec, sec + this.getKeySuffix(i))) { + if (!this.loadAssertion(cfg, sec, sec + Model.getKeySuffix(i))) { break; } else { i++; @@ -470,15 +470,6 @@ export function newModel(...text: string[]): Model { return m; } -/** - * newModelFromFile creates a model from a .CONF file. - */ -export function newModelFromFile(path: string): Model { - const m = new Model(); - m.loadModel(path); - return m; -} - /** * newModelFromString creates a model from a string which contains model text. */ diff --git a/src/persist/batchFileAdapter.ts b/src/persist/batchFileAdapter.ts deleted file mode 100644 index d764f188..00000000 --- a/src/persist/batchFileAdapter.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { FileAdapter } from './fileAdapter'; -import { BatchAdapter } from './batchAdapter'; - -/** - * BatchFileAdapter is the file adapter for Casbin. - * It can add policies and remove policies. - * @deprecated The class should not be used, you should use FileAdapter. - */ -export class BatchFileAdapter extends FileAdapter implements BatchAdapter { - /** - * FileAdapter is the constructor for FileAdapter. - * @param {string} filePath filePath the path of the policy file. - */ - constructor(filePath: string) { - super(filePath); - } -} diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index c00bf955..05ecbb7f 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -1,15 +1,14 @@ import { FilteredAdapter } from './filteredAdapter'; import { Model } from '../model'; -import { FileAdapter } from './fileAdapter'; import { Helper } from './helper'; -import { readFile } from '../util'; +import { StringAdapter } from './stringAdapter'; export class Filter { public g: string[] = []; public p: string[] = []; } -export class DefaultFilteredAdapter extends FileAdapter implements FilteredAdapter { +export class DefaultFilteredAdapter extends StringAdapter implements FilteredAdapter { private filtered: boolean; constructor(filePath: string) { @@ -29,8 +28,8 @@ export class DefaultFilteredAdapter extends FileAdapter implements FilteredAdapt return; } - if (!this.filePath) { - throw new Error('invalid file path, file path cannot be empty'); + if (!this.policy) { + return; } await this.loadFilteredPolicyFile(model, filter, Helper.loadPolicyLine); @@ -38,8 +37,7 @@ export class DefaultFilteredAdapter extends FileAdapter implements FilteredAdapt } private async loadFilteredPolicyFile(model: Model, filter: Filter, handler: (line: string, model: Model) => void): Promise { - const bodyBuf = await readFile(this.filePath); - const lines = bodyBuf.toString().split('\n'); + const lines = this.policy.split('\n'); lines.forEach((n: string, index: number) => { const line = n; if (!line || DefaultFilteredAdapter.filterLine(line, filter)) { diff --git a/src/persist/fileAdapter.ts b/src/persist/fileAdapter.ts deleted file mode 100644 index 849a59c7..00000000 --- a/src/persist/fileAdapter.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { Adapter } from './adapter'; -import { Model } from '../model'; -import { Helper } from './helper'; -import { arrayToString, readFile, writeFile } from '../util'; - -/** - * FileAdapter is the file adapter for Casbin. - * It can load policy from file or save policy to file. - */ -export class FileAdapter implements Adapter { - public readonly filePath: string; - - /** - * FileAdapter is the constructor for FileAdapter. - * @param {string} filePath filePath the path of the policy file. - */ - constructor(filePath: string) { - this.filePath = filePath; - } - - public async loadPolicy(model: Model): Promise { - if (!this.filePath) { - // throw new Error('invalid file path, file path cannot be empty'); - return; - } - await this.loadPolicyFile(model, Helper.loadPolicyLine); - } - - private async loadPolicyFile(model: Model, handler: (line: string, model: Model) => void): Promise { - const bodyBuf = await readFile(this.filePath); - const lines = bodyBuf.toString().split('\n'); - lines.forEach((n: string, index: number) => { - if (!n) { - return; - } - handler(n, model); - }); - } - - /** - * savePolicy saves all policy rules to the storage. - */ - public async savePolicy(model: Model): Promise { - if (!this.filePath) { - // throw new Error('invalid file path, file path cannot be empty'); - return false; - } - let result = ''; - - const pList = model.model.get('p'); - if (!pList) { - return false; - } - pList.forEach((n) => { - n.policy.forEach((m) => { - result += n.key + ', '; - result += arrayToString(m); - result += '\n'; - }); - }); - - const gList = model.model.get('g'); - if (!gList) { - return false; - } - gList.forEach((n) => { - n.policy.forEach((m) => { - result += n.key + ', '; - result += arrayToString(m); - result += '\n'; - }); - }); - - await this.savePolicyFile(result.trim()); - return true; - } - - private async savePolicyFile(text: string): Promise { - await writeFile(this.filePath, text); - } - - /** - * addPolicy adds a policy rule to the storage. - */ - public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { - throw new Error('not implemented'); - } - /** - * addPolicies adds policy rules to the storage. - This is part of the Auto-Save feature. - */ - public async addPolicies(sec: string, ptype: string, rules: string[][]): Promise { - throw new Error('not implemented'); - } - - /** - * UpdatePolicy updates a policy rule from storage. - * This is part of the Auto-Save feature. - */ - updatePolicy(sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise { - throw new Error('not implemented'); - } - - /** - * removePolicy removes a policy rule from the storage. - */ - public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { - throw new Error('not implemented'); - } - - /** - * removePolicies removes policy rules from the storage. - * This is part of the Auto-Save feature. - */ - public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { - throw new Error('not implemented'); - } - - /** - * removeFilteredPolicy removes policy rules that match the filter from the storage. - */ - public async removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - throw new Error('not implemented'); - } -} diff --git a/src/persist/helper.ts b/src/persist/helper.ts index bc659f8c..3645c4c9 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -1,5 +1,4 @@ import { Model } from '../model'; -import * as parse from 'csv-parse/lib/sync'; export class Helper { public static loadPolicyLine(line: string, model: Model): void { @@ -7,11 +6,19 @@ export class Helper { return; } - const tokens = parse(line, { - delimiter: ',', - skip_empty_lines: true, - trim: true, - }); + let tokens: any = undefined; + + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const parse = require('csv-parse/lib/sync'); + tokens = parse(line, { + delimiter: ',', + skip_empty_lines: true, + trim: true, + }); + } catch { + throw new Error('Please add csv-parse to your dependency.'); + } if (!tokens || !tokens[0]) { return; diff --git a/src/persist/index.ts b/src/persist/index.ts index 59d0b4d3..f7bd19f7 100644 --- a/src/persist/index.ts +++ b/src/persist/index.ts @@ -1,10 +1,8 @@ export * from './adapter'; -export * from './fileAdapter'; export * from './stringAdapter'; export * from './helper'; export * from './watcher'; export * from './filteredAdapter'; export * from './defaultFilteredAdapter'; export * from './batchAdapter'; -export * from './batchFileAdapter'; export * from './updatableAdapter'; diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 8cf43a8d..737b7043 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -20,7 +20,7 @@ export class StringAdapter implements Adapter { public async loadPolicy(model: Model): Promise { if (!this.policy) { - throw new Error('Invalid policy, policy document cannot be false-y'); + return; } await this.loadRules(model, Helper.loadPolicyLine); } diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index e8b4f571..56a9f1cb 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -14,7 +14,6 @@ import * as rbac from '../rbac'; import { ip } from './ip'; -import * as picomatch from 'picomatch'; // regexMatch determines whether key1 matches the pattern of key2 in regular expression. function regexMatch(key1: string, key2: string): boolean { @@ -191,6 +190,12 @@ function regexMatchFunc(...args: any[]): boolean { // ip2 can be an IP address or a CIDR pattern. // For example, '192.168.2.123' matches '192.168.2.0/24' function ipMatch(ip1: string, ip2: string): boolean { + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('buffer'); + } catch { + throw new Error('Please add buffer to your dependency.'); + } // check ip1 if (!(ip.isV4Format(ip1) || ip.isV6Format(ip1))) { throw new Error('invalid argument: ip1 in ipMatch() function is not an IP address.'); @@ -230,7 +235,13 @@ function ipMatchFunc(...args: any[]): boolean { * ``` */ function globMatch(string: string, pattern: string): boolean { - return picomatch(pattern)(string); + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const picomatch = require('picomatch'); + return picomatch(pattern)(string); + } catch { + throw new Error('Please add picomatch to your dependency.'); + } } // generateGFunction is the factory method of the g(_, _) function. diff --git a/src/util/util.ts b/src/util/util.ts index 2d551491..42ac081b 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as fs from 'fs'; - // escapeAssertion escapes the dots in the assertion, // because the expression evaluation doesn't support such variable names. function escapeAssertion(s: string): string { @@ -80,30 +78,6 @@ function setEquals(a: string[], b: string[]): boolean { return arrayEquals(a.sort(), b.sort()); } -// readFile return a promise for readFile. -function readFile(path: string, encoding?: string): any { - return new Promise((resolve, reject) => { - fs.readFile(path, encoding || 'utf8', (error, data) => { - if (error) { - reject(error); - } - resolve(data); - }); - }); -} - -// writeFile return a promise for writeFile. -function writeFile(path: string, file: string, encoding?: string): any { - return new Promise((resolve, reject) => { - fs.writeFile(path, file, encoding || 'utf8', (error) => { - if (error) { - reject(error); - } - resolve(true); - }); - }); -} - const evalReg = new RegExp(/\beval\(([^),]*)\)/g); // hasEval determine whether matcher contains function eval @@ -179,8 +153,6 @@ export { arrayToString, paramsToString, setEquals, - readFile, - writeFile, hasEval, replaceEval, getEvalValue, diff --git a/test/cachedEnforcer.test.ts b/test/cachedEnforcer.test.ts index 75c2fc17..93dd6c6c 100644 --- a/test/cachedEnforcer.test.ts +++ b/test/cachedEnforcer.test.ts @@ -13,13 +13,14 @@ // limitations under the License. import { Enforcer, newCachedEnforcer } from '../src'; +import { path2Content } from './utils'; async function testEnforce(e: Enforcer, sub: string, obj: string, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); } test('TestRBACModel', async () => { - const e = await newCachedEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await newCachedEnforcer(path2Content('examples/rbac_model.conf'), path2Content('examples/rbac_policy.csv')); await testEnforce(e, 'alice', 'data1', 'read', true); }); diff --git a/test/config/config.test.ts b/test/config/config.test.ts index 553d0fe9..3e962d22 100644 --- a/test/config/config.test.ts +++ b/test/config/config.test.ts @@ -1,6 +1,7 @@ import { Config } from '../../src'; +import { path2Content } from '../utils'; -const config = Config.newConfig('test/config/testini.ini'); +const config = Config.newConfig(path2Content('test/config/testini.ini')); describe('multi-line test', () => { it('should config.get("multi1::name") to equal r.sub==p.sub&&r.obj==p.obj', function () { diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 4c59bc40..24fa104d 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -14,7 +14,8 @@ import { readFileSync } from 'fs'; -import { newModel, newEnforcer, Enforcer, FileAdapter, StringAdapter, Util } from '../src'; +import { newModel, newEnforcer, Enforcer, StringAdapter, Util } from '../src'; +import { getEnforcerWithPath, getStringAdapter } from './utils'; async function testEnforce(e: Enforcer, sub: any, obj: string, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); @@ -46,7 +47,7 @@ test('TestKeyMatchModelInMemory', async () => { m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); - const a = new FileAdapter('examples/keymatch_policy.csv'); + const a = getStringAdapter('examples/keymatch_policy.csv'); let e = await newEnforcer(m, a); @@ -105,7 +106,7 @@ test('TestKeyMatchModelInMemoryDeny', async () => { m.addDef('e', 'e', '!some(where (p.eft == deny))'); m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); - const a = new FileAdapter('examples/keymatch_policy.csv'); + const a = getStringAdapter('examples/keymatch_policy.csv'); const e = await newEnforcer(m, a); @@ -264,7 +265,7 @@ test('TestNotUsedRBACModelInMemory', async () => { }); test('TestReloadPolicy', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await e.loadPolicy(); await testGetPolicy(e, [ @@ -275,20 +276,20 @@ test('TestReloadPolicy', async () => { ]); }); -test('TestSavePolicy', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); - - await e.savePolicy(); -}); +// test('TestSavePolicy', async () => { +// const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); +// +// await e.savePolicy(); +// }); TODO: implement this test('TestClearPolicy', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); e.clearPolicy(); }); test('TestEnableEnforce', async () => { - const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_policy.csv'); e.enableEnforce(false); await testEnforce(e, 'alice', 'data1', 'read', true); @@ -312,9 +313,9 @@ test('TestEnableEnforce', async () => { }); test('TestEnableLog', async () => { - const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv', true); + const e = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_policy.csv', true); // The log is enabled by default, so the above is the same with: - // const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + // const e = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -338,7 +339,7 @@ test('TestEnableLog', async () => { }); test('TestEnableAutoSave', async () => { - const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_policy.csv'); e.enableAutoSave(false); // Because AutoSave is disabled, the policy change only affects the policy in Casbin enforcer, @@ -376,8 +377,8 @@ test('TestEnableAutoSave', async () => { }); test('TestInitWithAdapter', async () => { - const adapter = new FileAdapter('examples/basic_policy.csv'); - const e = await newEnforcer('examples/basic_model.conf', adapter); + const adapter = getStringAdapter('examples/basic_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_model.conf', adapter); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -392,7 +393,7 @@ test('TestInitWithAdapter', async () => { test('TestInitWithStringAdapter', async () => { const policy = readFileSync('examples/basic_policy.csv').toString(); const adapter = new StringAdapter(policy); - const e = await newEnforcer('examples/basic_model.conf', adapter); + const e = await getEnforcerWithPath('examples/basic_model.conf', adapter); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -405,15 +406,15 @@ test('TestInitWithStringAdapter', async () => { }); test('TestRoleLinks', async () => { - const e = await newEnforcer('examples/rbac_model.conf'); + const e = await getEnforcerWithPath('examples/rbac_model.conf'); e.enableAutoBuildRoleLinks(false); await e.buildRoleLinks(); await e.enforce('user501', 'data9', 'read'); }); test('TestGetAndSetModel', async () => { - const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - const e2 = await newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await getEnforcerWithPath('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); await testEnforce(e, 'root', 'data1', 'read', false); @@ -423,8 +424,8 @@ test('TestGetAndSetModel', async () => { }); test('TestGetAndSetAdapterInMem', async () => { - const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); - const e2 = await newEnforcer('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e2 = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_inverse_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -437,11 +438,11 @@ test('TestGetAndSetAdapterInMem', async () => { }); test('TestSetAdapterFromFile', async () => { - const e = await newEnforcer('examples/basic_model.conf'); + const e = await getEnforcerWithPath('examples/basic_model.conf'); await testEnforce(e, 'alice', 'data1', 'read', false); - const a = new FileAdapter('examples/basic_policy.csv'); + const a = getStringAdapter('examples/basic_policy.csv'); e.setAdapter(a); await e.loadPolicy(); @@ -449,7 +450,7 @@ test('TestSetAdapterFromFile', async () => { }); test('TestSetAdapterFromString', async () => { - const e = await newEnforcer('examples/basic_model.conf'); + const e = await getEnforcerWithPath('examples/basic_model.conf'); await testEnforce(e, 'alice', 'data1', 'read', false); @@ -463,7 +464,7 @@ test('TestSetAdapterFromString', async () => { }); test('TestInitEmpty with File Adapter', async () => { - const e = await newEnforcer(); + const e = await getEnforcerWithPath(); const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); @@ -471,7 +472,7 @@ test('TestInitEmpty with File Adapter', async () => { m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); - const a = new FileAdapter('examples/keymatch_policy.csv'); + const a = getStringAdapter('examples/keymatch_policy.csv'); e.setModel(m); e.setAdapter(a); @@ -481,7 +482,7 @@ test('TestInitEmpty with File Adapter', async () => { }); test('TestInitEmpty with String Adapter', async () => { - const e = await newEnforcer(); + const e = await getEnforcerWithPath(); const m = newModel(); m.addDef('r', 'r', 'sub, obj, act'); @@ -501,11 +502,11 @@ test('TestInitEmpty with String Adapter', async () => { describe('Unimplemented File Adapter methods', () => { let e = {} as Enforcer; - let a = {} as FileAdapter; + let a = {} as StringAdapter; beforeEach(async () => { - a = new FileAdapter('examples/basic_policy.csv'); - e = await newEnforcer('examples/basic_model.conf', a); + a = getStringAdapter('examples/basic_policy.csv'); + e = await getEnforcerWithPath('examples/basic_model.conf', a); }); test('addPolicy', async () => { @@ -528,7 +529,7 @@ describe('Unimplemented String Adapter methods', () => { beforeEach(async () => { const policy = readFileSync('examples/basic_policy.csv').toString(); a = new StringAdapter(policy); - e = await newEnforcer('examples/basic_model.conf', a); + e = await getEnforcerWithPath('examples/basic_model.conf', a); }); test('savePolicy', async () => { @@ -559,7 +560,7 @@ class TestSub { } test('test ABAC Scaling', async () => { - const e = await newEnforcer('examples/abac_rule_model.conf', 'examples/abac_rule_policy.csv'); + const e = await getEnforcerWithPath('examples/abac_rule_model.conf', 'examples/abac_rule_policy.csv'); const sub1 = new TestSub('alice', 16); const sub2 = new TestSub('alice', 20); @@ -587,7 +588,7 @@ test('TestEnforceSync', async () => { m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await newEnforcer(m); + const e = await getEnforcerWithPath(m); await e.addPermissionForUser('alice', 'data1', 'invalid'); @@ -602,7 +603,7 @@ test('TestEnforceEx', async () => { m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await newEnforcer(m); + const e = await getEnforcerWithPath(m); await e.addPermissionForUser('alice', 'data1', 'invalid'); @@ -618,7 +619,7 @@ test('TestSyncEnforceEx', async () => { m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); - const e = await newEnforcer(m); + const e = await getEnforcerWithPath(m); await e.addPermissionForUser('alice', 'data1', 'invalid'); @@ -627,7 +628,7 @@ test('TestSyncEnforceEx', async () => { }); test('Test RBAC G2', async () => { - const e = await newEnforcer('examples/rbac_g2_model.conf', 'examples/rbac_g2_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_g2_model.conf', 'examples/rbac_g2_policy.csv'); expect(await e.enforce('alice', 'data1', 'read')).toBe(false); expect(await e.enforce('admin', 'data1', 'read')).toBe(true); }); diff --git a/test/frontend.test.ts b/test/frontend.test.ts deleted file mode 100644 index 24a8a1c4..00000000 --- a/test/frontend.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2020 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import { readFileSync } from 'fs'; -import { newEnforcer } from '../src'; -import { casbinJsGetPermissionForUser } from '../src'; - -test('TestCasbinJsGetPermissionForUser', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); - const a = await casbinJsGetPermissionForUser(e, 'alice'); - const b = await casbinJsGetPermissionForUser(e, 'alice'); - if (a !== b) { - throw new Error('Unexpected side affect.'); - } - const received = JSON.parse(await casbinJsGetPermissionForUser(e, 'alice')); - const expectedModelStr = readFileSync('examples/rbac_model.conf').toString(); - // If you enable CR_LF auto transfer on Windows platform, this can lead to some unexpected behavior. - expect(received['m']).toBe(expectedModelStr.replace(/\n\n/g, '\n')); - const expectedPoliciesStr = readFileSync('examples/rbac_with_hierarchy_policy.csv').toString(); - const expectedPolicyItem = expectedPoliciesStr.split(RegExp(',|\n')); - let i = 0; - for (const sArr of received['p']) { - for (const s of sArr) { - expect(s.trim()).toEqual(expectedPolicyItem[i].trim()); - i = i + 1; - } - } -}); diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index fde73c65..b61a4715 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { newEnforcer, Enforcer, Util } from '../src'; -import { FileAdapter } from '../src'; +import { Enforcer, Util } from '../src'; +import { getEnforcerWithPath } from './utils'; let e = {} as Enforcer; beforeEach(async () => { - e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); }); function testArrayEquals(value: string[], other: string[]): void { @@ -146,21 +146,21 @@ test('addPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(true); }); -test('addPolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const rules = [ - ['jack', 'data4', 'read'], - ['katy', 'data4', 'write'], - ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'], - ]; - const added = await e.addPolicies(rules); - expect(added).toBe(true); - for (const rule of rules) { - expect(await e.hasPolicy(...rule)).toBe(true); - } -}); +// test('addPolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const rules = [ +// ['jack', 'data4', 'read'], +// ['katy', 'data4', 'write'], +// ['leyo', 'data4', 'read'], +// ['ham', 'data4', 'write'], +// ]; +// const added = await e.addPolicies(rules); +// expect(added).toBe(true); +// for (const rule of rules) { +// expect(await e.hasPolicy(...rule)).toBe(true); +// } +// }); TODO: implement this for StringAdapter test('addNamedPolicy', async () => { const p = ['eve', 'data3', 'read']; @@ -169,43 +169,43 @@ test('addNamedPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(true); }); -test('addNamedPolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const rules = [ - ['jack', 'data4', 'read'], - ['katy', 'data4', 'write'], - ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'], - ]; - const added = await e.addNamedPolicies('p', rules); - expect(added).toBe(true); - for (const rule of rules) { - expect(await e.hasPolicy(...rule)).toBe(true); - } -}); - -test('updatePolicy', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const p = ['alice', 'data1', 'read']; - const q = ['alice', 'data2', 'read']; - const updated = await e.updatePolicy(p, q); - expect(updated).toBe(true); - expect(await e.hasPolicy(...p)).toBe(false); - expect(await e.hasPolicy(...q)).toBe(true); -}); - -test('updateNamedPolicy', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const p = ['alice', 'data1', 'read']; - const q = ['alice', 'data2', 'read']; - const updated = await e.updateNamedPolicy('p', p, q); - expect(updated).toBe(true); - expect(await e.hasPolicy(...p)).toBe(false); - expect(await e.hasPolicy(...q)).toBe(true); -}); +// test('addNamedPolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const rules = [ +// ['jack', 'data4', 'read'], +// ['katy', 'data4', 'write'], +// ['leyo', 'data4', 'read'], +// ['ham', 'data4', 'write'], +// ]; +// const added = await e.addNamedPolicies('p', rules); +// expect(added).toBe(true); +// for (const rule of rules) { +// expect(await e.hasPolicy(...rule)).toBe(true); +// } +// }); TODO: implement this for StringAdapter + +// test('updatePolicy', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const p = ['alice', 'data1', 'read']; +// const q = ['alice', 'data2', 'read']; +// const updated = await e.updatePolicy(p, q); +// expect(updated).toBe(true); +// expect(await e.hasPolicy(...p)).toBe(false); +// expect(await e.hasPolicy(...q)).toBe(true); +// }); TODO: implement this for StringAdapter + +// test('updateNamedPolicy', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const p = ['alice', 'data1', 'read']; +// const q = ['alice', 'data2', 'read']; +// const updated = await e.updateNamedPolicy('p', p, q); +// expect(updated).toBe(true); +// expect(await e.hasPolicy(...p)).toBe(false); +// expect(await e.hasPolicy(...q)).toBe(true); +// }); TODO: implement this for StringAdapter test('removePolicy', async () => { const p = ['alice', 'data1', 'read']; @@ -214,23 +214,23 @@ test('removePolicy', async () => { expect(await e.hasPolicy(...p)).toBe(false); }); -test('removePolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const rules = [ - ['jack', 'data4', 'read'], - ['katy', 'data4', 'write'], - ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'], - ]; - const added = await e.addPolicies(rules); - expect(added).toBe(true); - const removed = await e.removePolicies(rules); - expect(removed).toBe(true); - for (const rule of rules) { - expect(await e.hasPolicy(...rule)).toBe(false); - } -}); +// test('removePolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const rules = [ +// ['jack', 'data4', 'read'], +// ['katy', 'data4', 'write'], +// ['leyo', 'data4', 'read'], +// ['ham', 'data4', 'write'], +// ]; +// const added = await e.addPolicies(rules); +// expect(added).toBe(true); +// const removed = await e.removePolicies(rules); +// expect(removed).toBe(true); +// for (const rule of rules) { +// expect(await e.hasPolicy(...rule)).toBe(false); +// } +// }); TODO: implement this for StringAdapter test('removeFilteredPolicy', async () => { const p = ['alice', 'data1', 'read']; @@ -246,23 +246,23 @@ test('removeNamedPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(false); }); -test('removeNamedPolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const rules = [ - ['jack', 'data4', 'read'], - ['katy', 'data4', 'write'], - ['leyo', 'data4', 'read'], - ['ham', 'data4', 'write'], - ]; - const added = await e.addPolicies(rules); - expect(added).toBe(true); - const removed = await e.removeNamedPolicies('p', rules); - expect(removed).toBe(true); - for (const rule of rules) { - expect(await e.hasPolicy(...rule)).toBe(false); - } -}); +// test('removeNamedPolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const rules = [ +// ['jack', 'data4', 'read'], +// ['katy', 'data4', 'write'], +// ['leyo', 'data4', 'read'], +// ['ham', 'data4', 'write'], +// ]; +// const added = await e.addPolicies(rules); +// expect(added).toBe(true); +// const removed = await e.removeNamedPolicies('p', rules); +// expect(removed).toBe(true); +// for (const rule of rules) { +// expect(await e.hasPolicy(...rule)).toBe(false); +// } +// }); TODO: implement this for StringAdapter test('removeFilteredNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; @@ -286,50 +286,50 @@ test('addGroupingPolicy', async () => { expect(added).toBe(true); }); -test('addGroupingPolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const groupingRules = [ - ['ham', 'data4_admin'], - ['jack', 'data5_admin'], - ]; - const added = await e.addGroupingPolicies(groupingRules); - expect(added).toBe(true); -}); +// test('addGroupingPolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const groupingRules = [ +// ['ham', 'data4_admin'], +// ['jack', 'data5_admin'], +// ]; +// const added = await e.addGroupingPolicies(groupingRules); +// expect(added).toBe(true); +// }); TODO: implement this for StringAdapter test('addNamedGroupingPolicy', async () => { const added = await e.addNamedGroupingPolicy('g', 'group1', 'data2_admin'); expect(added).toBe(true); }); -test('addNamedGroupingPolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const groupingRules = [ - ['ham', 'data4_admin'], - ['jack', 'data5_admin'], - ]; - const added = await e.addNamedGroupingPolicies('g', groupingRules); - expect(added).toBe(true); -}); +// test('addNamedGroupingPolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const groupingRules = [ +// ['ham', 'data4_admin'], +// ['jack', 'data5_admin'], +// ]; +// const added = await e.addNamedGroupingPolicies('g', groupingRules); +// expect(added).toBe(true); +// }); TODO: implement this for StringAdapter test('removeGroupingPolicy', async () => { const removed = await e.removeGroupingPolicy('alice', 'data2_admin'); expect(removed).toBe(true); }); -test('removeGroupingPolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const groupingRules = [ - ['ham', 'data4_admin'], - ['jack', 'data5_admin'], - ]; - const added = await e.addGroupingPolicies(groupingRules); - expect(added).toBe(true); - const removed = await e.removeGroupingPolicies(groupingRules); - expect(removed).toBe(true); -}); +// test('removeGroupingPolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const groupingRules = [ +// ['ham', 'data4_admin'], +// ['jack', 'data5_admin'], +// ]; +// const added = await e.addGroupingPolicies(groupingRules); +// expect(added).toBe(true); +// const removed = await e.removeGroupingPolicies(groupingRules); +// expect(removed).toBe(true); +// }); TODO: implement this for StringAdapter test('removeFilteredGroupingPolicy', async () => { const removed = await e.removeFilteredGroupingPolicy(0, 'alice'); @@ -341,15 +341,15 @@ test('removeFilteredNamedGroupingPolicy', async () => { expect(removed).toBe(true); }); -test('removeNamedGroupingPolicies', async () => { - const a = new FileAdapter('examples/rbac_policy.csv'); - e.setAdapter(a); - const groupingRules = [ - ['ham', 'data4_admin'], - ['jack', 'data5_admin'], - ]; - const added = await e.addGroupingPolicies(groupingRules); - expect(added).toBe(true); - const removed = await e.removeNamedGroupingPolicies('g', groupingRules); - expect(removed).toBe(true); -}); +// test('removeNamedGroupingPolicies', async () => { +// const a = getStringAdapter('examples/rbac_policy.csv'); +// e.setAdapter(a); +// const groupingRules = [ +// ['ham', 'data4_admin'], +// ['jack', 'data5_admin'], +// ]; +// const added = await e.addGroupingPolicies(groupingRules); +// expect(added).toBe(true); +// const removed = await e.removeNamedGroupingPolicies('g', groupingRules); +// expect(removed).toBe(true); +// }); TODO: implement this for StringAdapter diff --git a/test/model.test.ts b/test/model.test.ts index 433f5f21..18806a3c 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -14,8 +14,9 @@ // noinspection JSMismatchedCollectionQueryUpdate import * as _ from 'lodash'; -import { DefaultRoleManager, Enforcer, newEnforcer, newModel } from '../src'; +import { DefaultRoleManager, Enforcer, newModel } from '../src'; import { keyMatch2Func, keyMatch3Func, keyMatchFunc } from '../src/util'; +import { getEnforcerWithPath } from './utils'; async function testEnforce(e: Enforcer, sub: string, obj: any, act: string, res: boolean): Promise { await expect(e.enforce(sub, obj, act)).resolves.toBe(res); @@ -30,7 +31,7 @@ async function testDomainEnforce(e: Enforcer, sub: string, dom: string, obj: str } test('TestBasicModel', async () => { - const e = await newEnforcer('examples/basic_model.conf', 'examples/basic_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_model.conf', 'examples/basic_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -43,7 +44,7 @@ test('TestBasicModel', async () => { }); test('TestBasicModelNoPolicy', async () => { - const e = await newEnforcer('examples/basic_model.conf'); + const e = await getEnforcerWithPath('examples/basic_model.conf'); await testEnforce(e, 'alice', 'data1', 'read', false); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -56,7 +57,7 @@ test('TestBasicModelNoPolicy', async () => { }); test('TestBasicModelWithRoot', async () => { - const e = await newEnforcer('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_with_root_model.conf', 'examples/basic_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -73,7 +74,7 @@ test('TestBasicModelWithRoot', async () => { }); test('TestBasicModelWithRootNoPolicy', async () => { - const e = await newEnforcer('examples/basic_with_root_model.conf'); + const e = await getEnforcerWithPath('examples/basic_with_root_model.conf'); await testEnforce(e, 'alice', 'data1', 'read', false); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -90,7 +91,7 @@ test('TestBasicModelWithRootNoPolicy', async () => { }); test('TestBasicModelWithoutUsers', async () => { - const e = await newEnforcer('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_without_users_model.conf', 'examples/basic_without_users_policy.csv'); await testEnforceWithoutUsers(e, 'data1', 'read', true); await testEnforceWithoutUsers(e, 'data1', 'write', false); @@ -99,7 +100,7 @@ test('TestBasicModelWithoutUsers', async () => { }); test('TestBasicModelWithoutResources', async () => { - const e = await newEnforcer('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); + const e = await getEnforcerWithPath('examples/basic_without_resources_model.conf', 'examples/basic_without_resources_policy.csv'); await testEnforceWithoutUsers(e, 'alice', 'read', true); await testEnforceWithoutUsers(e, 'alice', 'write', false); @@ -108,7 +109,7 @@ test('TestBasicModelWithoutResources', async () => { }); test('TestRBACModel', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -121,7 +122,7 @@ test('TestRBACModel', async () => { }); test('TestRBACModelWithResourceRoles', async () => { - const e = await newEnforcer('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_resource_roles_model.conf', 'examples/rbac_with_resource_roles_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', true); @@ -134,7 +135,7 @@ test('TestRBACModelWithResourceRoles', async () => { }); test('TestRBACModelWithDomains', async () => { - const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); await testDomainEnforce(e, 'alice', 'domain1', 'data1', 'read', true); await testDomainEnforce(e, 'alice', 'domain1', 'data1', 'write', true); @@ -157,7 +158,7 @@ class TestResource { } test('TestGlobMatchModel', async () => { - const e = await newEnforcer('examples/glob_model.conf', 'examples/glob_policy.csv'); + const e = await getEnforcerWithPath('examples/glob_model.conf', 'examples/glob_policy.csv'); await testEnforce(e, 'u1', '/foo', 'read', false); await testEnforce(e, 'u1', '/foo/subprefix', 'read', true); @@ -175,7 +176,7 @@ test('TestGlobMatchModel', async () => { }); test('TestABACModel', async () => { - const e = await newEnforcer('examples/abac_model.conf'); + const e = await getEnforcerWithPath('examples/abac_model.conf'); const data1 = new TestResource('data1', 'alice'); const data2 = new TestResource('data2', 'bob'); @@ -191,7 +192,7 @@ test('TestABACModel', async () => { }); test('TestKeyMatchModel', async () => { - const e = await newEnforcer('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); + const e = await getEnforcerWithPath('examples/keymatch_model.conf', 'examples/keymatch_policy.csv'); await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); await testEnforce(e, 'alice', '/alice_data/resource1', 'POST', true); @@ -217,7 +218,7 @@ test('TestKeyMatchModel', async () => { }); test('TestKeyMatch2Model', async () => { - const e = await newEnforcer('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); + const e = await getEnforcerWithPath('examples/keymatch2_model.conf', 'examples/keymatch2_policy.csv'); await testEnforce(e, 'alice', '/alice_data', 'GET', false); await testEnforce(e, 'alice', '/alice_data/resource1', 'GET', true); @@ -228,11 +229,7 @@ test('TestKeyMatch2Model', async () => { function customFunction(key1: string, key2: string): boolean { if (key1 === '/alice_data2/myid/using/res_id' && key2 === '/alice_data/:resource') { return true; - } else if (key1 === '/alice_data2/myid/using/res_id' && key2 === '/alice_data2/:id/using/:resId') { - return true; - } else { - return false; - } + } else return key1 === '/alice_data2/myid/using/res_id' && key2 === '/alice_data2/:id/using/:resId'; } function customFunctionWrapper(...args: any[]): boolean { @@ -243,7 +240,7 @@ function customFunctionWrapper(...args: any[]): boolean { } test('TestKeyMatchCustomModel', async () => { - const e = await newEnforcer('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); + const e = await getEnforcerWithPath('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); e.addFunction('keyMatchCustom', customFunctionWrapper); @@ -252,7 +249,7 @@ test('TestKeyMatchCustomModel', async () => { }); test('TestIPMatchModel', async () => { - const e = await newEnforcer('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); + const e = await getEnforcerWithPath('examples/ipmatch_model.conf', 'examples/ipmatch_policy.csv'); await testEnforce(e, '192.168.2.123', 'data1', 'read', true); await testEnforce(e, '192.168.2.123', 'data1', 'write', false); @@ -276,7 +273,7 @@ test('TestIPMatchModel', async () => { }); test('TestPriorityModel', async () => { - const e = await newEnforcer('examples/priority_model.conf', 'examples/priority_policy.csv'); + const e = await getEnforcerWithPath('examples/priority_model.conf', 'examples/priority_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', true); await testEnforce(e, 'alice', 'data1', 'write', false); @@ -289,7 +286,7 @@ test('TestPriorityModel', async () => { }); test('TestExplicitPriorityModel', async () => { - const e = await newEnforcer('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit.csv'); + const e = await getEnforcerWithPath('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit.csv'); await testEnforce(e, 'alice', 'data1', 'write', true); await testEnforce(e, 'alice', 'data1', 'read', true); @@ -302,7 +299,7 @@ test('TestExplicitPriorityModel', async () => { }); test('TestExplicitPriorityModelAddPolicy', async () => { - const e = await newEnforcer('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit.csv'); + const e = await getEnforcerWithPath('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit.csv'); await e.addPolicy('1', 'bob', 'data2', 'write', 'deny'); @@ -316,25 +313,25 @@ test('TestExplicitPriorityModelAddPolicy', async () => { await testEnforce(e, 'data2_allow_group', 'data2', 'write', true); }); -test('TestExplicitPriorityModelUpdatePolicy', async () => { - const e = await newEnforcer('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit_update.csv'); - - await e.updatePolicy(['1', 'bob', 'data2', 'write', 'allow'], ['1', 'bob', 'data2', 'write', 'deny']); - - await testEnforce(e, 'alice', 'data1', 'write', true); - await testEnforce(e, 'alice', 'data1', 'read', true); - await testEnforce(e, 'bob', 'data2', 'read', false); - await testEnforce(e, 'bob', 'data2', 'write', false); - await testEnforce(e, 'data1_deny_group', 'data1', 'read', false); - await testEnforce(e, 'data1_deny_group', 'data1', 'write', false); - await testEnforce(e, 'data2_allow_group', 'data2', 'read', true); - await testEnforce(e, 'data2_allow_group', 'data2', 'write', true); - - await expect(e.updatePolicy(['1', 'bob', 'data2', 'write', 'allow'], ['2999', 'bob', 'data2', 'write', 'deny'])).resolves.toBe(false); -}); +// test('TestExplicitPriorityModelUpdatePolicy', async () => { +// const e = await getEnforcerWithPath('examples/priority_model_explicit.conf', 'examples/priority_policy_explicit_update.csv'); +// +// await e.updatePolicy(['1', 'bob', 'data2', 'write', 'allow'], ['1', 'bob', 'data2', 'write', 'deny']); +// +// await testEnforce(e, 'alice', 'data1', 'write', true); +// await testEnforce(e, 'alice', 'data1', 'read', true); +// await testEnforce(e, 'bob', 'data2', 'read', false); +// await testEnforce(e, 'bob', 'data2', 'write', false); +// await testEnforce(e, 'data1_deny_group', 'data1', 'read', false); +// await testEnforce(e, 'data1_deny_group', 'data1', 'write', false); +// await testEnforce(e, 'data2_allow_group', 'data2', 'read', true); +// await testEnforce(e, 'data2_allow_group', 'data2', 'write', true); +// +// await expect(e.updatePolicy(['1', 'bob', 'data2', 'write', 'allow'], ['2999', 'bob', 'data2', 'write', 'deny'])).resolves.toBe(false); +// }); TODO: implement this test('TestPriorityModelIndeterminate', async () => { - const e = await newEnforcer('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); + const e = await getEnforcerWithPath('examples/priority_model.conf', 'examples/priority_indeterminate_policy.csv'); await testEnforce(e, 'alice', 'data1', 'read', false); }); @@ -348,7 +345,7 @@ test('TestMatcher', async () => { }); test('TestRBACModelWithPattern', async () => { - const e = await newEnforcer('examples/rbac_with_pattern_model.conf', 'examples/rbac_with_pattern_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_pattern_model.conf', 'examples/rbac_with_pattern_policy.csv'); // Here's a little confusing: the matching function here is not the custom function used in matcher. // It is the matching function used by "g" (and "g2", "g3" if any..) @@ -380,7 +377,7 @@ test('TestRBACModelWithPattern', async () => { }); test('TestNodeCasbin150', async () => { - const e = await newEnforcer('examples/issues/node_casbin_150_model.conf', 'examples/issues/node_casbin_150_policy.csv'); + const e = await getEnforcerWithPath('examples/issues/node_casbin_150_model.conf', 'examples/issues/node_casbin_150_policy.csv'); const rm = e.getRoleManager() as DefaultRoleManager; await rm.addMatchingFunc(keyMatchFunc); @@ -390,7 +387,7 @@ test('TestNodeCasbin150', async () => { }); test('TestDomainMatchModel', async () => { - const e = await newEnforcer('examples/rbac_with_domain_pattern_model.conf', 'examples/rbac_with_domain_pattern_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_domain_pattern_model.conf', 'examples/rbac_with_domain_pattern_policy.csv'); const rm = e.getRoleManager() as DefaultRoleManager; await rm.addDomainMatchingFunc(keyMatch2Func); @@ -408,7 +405,7 @@ test('TestDomainMatchModel', async () => { }); test('TestAllMatchModel', async () => { - const e = await newEnforcer('examples/rbac_with_all_pattern_model.conf', 'examples/rbac_with_all_pattern_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_all_pattern_model.conf', 'examples/rbac_with_all_pattern_policy.csv'); const rm = e.getRoleManager() as DefaultRoleManager; await rm.addMatchingFunc(keyMatch2Func); @@ -421,7 +418,7 @@ test('TestAllMatchModel', async () => { }); test('ABACModelWithInOperator', async () => { - const e = await newEnforcer('examples/in_operator_model.conf'); + const e = await getEnforcerWithPath('examples/in_operator_model.conf'); class TestRule1 { public Owner: string; diff --git a/test/model/model.test.ts b/test/model/model.test.ts index 43a34516..9d687adb 100644 --- a/test/model/model.test.ts +++ b/test/model/model.test.ts @@ -1,4 +1,4 @@ -import { ConfigInterface, newModel, newModelFromFile, newModelFromString, requiredSections, sectionNameMap } from '../../src'; +import { ConfigInterface, newModel, newModelFromString, requiredSections, sectionNameMap } from '../../src'; import { readFileSync } from 'fs'; class MockConfig implements ConfigInterface { @@ -43,12 +43,6 @@ test('TestNewModel', () => { expect(m !== null).toBe(true); }); -test('TestNewModelFromFile', () => { - const m = newModelFromFile(basicExample); - - expect(m !== null).toBe(true); -}); - test('TestNewModelFromString', () => { const m = newModelFromString(readFileSync(basicExample).toString()); diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index a0e45064..b15a205e 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -12,20 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { newEnforcer } from '../src'; +import { getEnforcerWithPath } from './utils'; test('test getRolesForUser', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getRolesForUser('alice')).toEqual(['admin']); }); test('test getRolesForUser with domain', async () => { - const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); expect(await e.getRolesForUser('alice', 'domain1')).toEqual(['role:global_admin']); }); test('test add/deleteRoleForUSer with domain', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getRolesForUser('bob')).toEqual([]); expect(await e.addRoleForUser('bob', 'data1_admin')).toEqual(true); expect(await e.hasRoleForUser('bob', 'data1_admin')).toEqual(true); @@ -36,7 +36,7 @@ test('test add/deleteRoleForUSer with domain', async () => { }); test('test add/deleteRoleForUSer with domain', async () => { - const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); expect(await e.getRolesForUser('bob', 'domain1')).toEqual([]); expect(await e.addRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true); expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true); @@ -47,18 +47,18 @@ test('test add/deleteRoleForUSer with domain', async () => { }); test('test getImplicitRolesForUser', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitRolesForUser('bob')).toEqual([]); expect(await e.getImplicitRolesForUser('alice')).toEqual(['admin', 'data1_admin', 'data2_admin']); }); test('test getImplicitRolesForUser with domain', async () => { - const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['role:global_admin', 'role:reader', 'role:writer']); }); test('test getImplicitPermissionsForUser', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true); @@ -76,7 +76,7 @@ test('test getImplicitPermissionsForUser', async () => { }); test('test deleteRolesForUser', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ @@ -99,7 +99,7 @@ test('test deleteRolesForUser', async () => { }); test('test deleteRolesForUser with domain', async () => { - const e = await newEnforcer('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['admin']); expect(await e.getImplicitPermissionsForUser('alice', 'domain1')).toEqual([ ['admin', 'domain1', 'data1', 'read'], @@ -122,7 +122,7 @@ test('test deleteRolesForUser with domain', async () => { }); test('test deleteRole', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ ['alice', 'data1', 'read'], @@ -142,7 +142,7 @@ test('test deleteRole', async () => { }); test('test deleteUser', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]); expect(await e.getImplicitPermissionsForUser('alice')).toEqual([ ['alice', 'data1', 'read'], @@ -160,7 +160,7 @@ test('test deleteUser', async () => { }); test('test getImplicitUsersForPermission', async () => { - const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv'); expect(await e.getImplicitUsersForPermission('data1', 'read')).toEqual(['alice']); expect(await e.getImplicitUsersForPermission('data1', 'write')).toEqual(['alice']); expect(await e.getImplicitUsersForPermission('data2', 'read')).toEqual(['alice']); diff --git a/test/utils.ts b/test/utils.ts new file mode 100644 index 00000000..57fac362 --- /dev/null +++ b/test/utils.ts @@ -0,0 +1,33 @@ +import { readFileSync } from 'fs'; +import { Adapter, Enforcer, Model, newEnforcer, StringAdapter } from '../src'; + +export function path2Content(path: string): string { + return readFileSync(path).toString().replace(new RegExp('\r\n', 'g'), '\n'); +} + +export async function getEnforcerWithPath( + modelPath?: string | Model, + policyPath?: string | Adapter, + logOption?: boolean +): Promise { + if (!modelPath) { + return await newEnforcer(); + } + if (typeof modelPath === 'string') { + modelPath = path2Content(modelPath); + } + if (!policyPath) { + return await newEnforcer(modelPath); + } + if (typeof policyPath === 'string') { + policyPath = path2Content(policyPath); + } + if (!logOption) { + return await newEnforcer(modelPath, policyPath); + } + return await newEnforcer(modelPath, policyPath, logOption); +} + +export function getStringAdapter(path: string): StringAdapter { + return new StringAdapter(path2Content(path)); +} diff --git a/tsconfig.json b/tsconfig.json index ee1a6848..cd2044e4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,5 +9,5 @@ "downlevelIteration": true, "allowSyntheticDefaultImports": true }, - "include": ["src/**/*"] + "include": ["src/**/*", "test/utils.ts"] } diff --git a/yarn.lock b/yarn.lock index f9dce0cc..c541fa0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1527,6 +1527,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1640,6 +1645,14 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -3559,6 +3572,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-walk@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -7509,10 +7527,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^3.7.2: - version "3.9.9" - resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" - integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== +typescript@^4.3.5: + version "4.3.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== uglify-js@^3.1.4: version "3.13.5" From c666609fecda5715309b0594b64d25cae5aaee95 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Fri, 23 Jul 2021 10:06:25 +0800 Subject: [PATCH 465/497] ci: forbidden auto-release before refactor complete Signed-off-by: Zxilly --- .github/workflows/main.yml | 24 ++++++++++++------------ README.md | 10 +++++----- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 73bf7aa0..e8a677cc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,18 +24,18 @@ jobs: flag-name: run-${{ matrix.node-version }} parallel: true - semantic-release: - needs: [test] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - name: Run semantic-release - if: github.repository == 'casbin/node-casbin' && github.event_name == 'push' - run: yarn install --no-lockfile && yarn semantic-release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + # semantic-release: + # needs: [test] + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v2 + # + # - name: Run semantic-release + # if: github.repository == 'casbin/node-casbin' && github.event_name == 'push' + # run: yarn install --no-lockfile && yarn semantic-release + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # NPM_TOKEN: ${{ secrets.NPM_TOKEN }} finish: needs: test diff --git a/README.md b/README.md index 2fcdb134..f74d2447 100644 --- a/README.md +++ b/README.md @@ -9,16 +9,16 @@ [![Release](https://img.shields.io/github/release/casbin/casbin.js.svg)](https://github.com/casbin/casbin.js/releases/latest) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby) -[npm-image]: https://img.shields.io/npm/v/casbin.svg?style=flat-square -[npm-url]: https://npmjs.org/package/casbin -[download-image]: https://img.shields.io/npm/dm/casbin.svg?style=flat-square -[download-url]: https://npmjs.org/package/casbin +[npm-image]: https://img.shields.io/npm/v/casbin.js.svg?style=flat-square +[npm-url]: https://npmjs.org/package/casbin.js +[download-image]: https://img.shields.io/npm/dm/casbin.js.svg?style=flat-square +[download-url]: https://npmjs.org/package/casbin.js **News**: still worry about how to write the correct `casbin.js` policy? [Casbin online editor](http://casbin.org/en/editor) is coming to help! ![casbin Logo](casbin-logo.png) -`casbin.js` is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). +`casbin.js` is a powerful and efficient open-source access control library for TypeScript/JavaScript projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model). ## All the languages supported by Casbin: From fabd784ff5f2c2dbb0e1ddc3867b18adeb423da8 Mon Sep 17 00:00:00 2001 From: Gabriel-403 <1499015923@qq.com> Date: Sat, 24 Jul 2021 22:44:41 +0800 Subject: [PATCH 466/497] feat: implement string adapater Signed-off-by: Gabriel-403 <1499015923@qq.com> --- src/persist/stringAdapter.ts | 35 ++++++++++++++++++++++++++---- test/enforcer.test.ts | 16 -------------- test/persist/stringAdapter.test.ts | 24 ++++++++++++++++++++ 3 files changed, 55 insertions(+), 20 deletions(-) create mode 100644 test/persist/stringAdapter.test.ts diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 737b7043..3983dc70 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -1,13 +1,16 @@ import { Adapter } from './adapter'; import { Model } from '../model'; import { Helper } from './helper'; +import { BatchAdapter } from './batchAdapter'; +import * as util from '../util'; /** * StringAdapter is the string adapter for Casbin. * It can load policy from a string. */ -export class StringAdapter implements Adapter { - public readonly policy: string; +export class StringAdapter implements Adapter, BatchAdapter { + public policy: string; + private policies: string[][] = new Array>(); /** * StringAdapter is the constructor for StringAdapter. @@ -46,14 +49,26 @@ export class StringAdapter implements Adapter { * addPolicy adds a policy rule to the storage. */ public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { - throw new Error('not implemented'); + const ruleClone = rule.slice(); + ruleClone.unshift(ptype); + this.policies.push(ruleClone); } /** * removePolicy removes a policy rule from the storage. */ public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { - throw new Error('not implemented'); + const ruleClone = rule.slice(); + ruleClone.unshift(ptype); + this.policies = this.policies.filter((r) => !util.arrayEquals(ruleClone, r)); + } + + public async getPolicy(): Promise { + return this.policies.map((p) => p.join(', ')).join('\n'); + } + + public async getPolicies(): Promise { + return this.policies; } /** @@ -62,4 +77,16 @@ export class StringAdapter implements Adapter { public async removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { throw new Error('not implemented'); } + + public async addPolicies(sec: string, ptype: string, rules: string[][]): Promise { + rules.forEach((rule) => { + this.addPolicy(sec, ptype, rule); + }); + } + + public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { + rules.forEach((rule) => { + this.removePolicy(sec, ptype, rule); + }); + } } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 24fa104d..4fd4c22b 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -509,14 +509,6 @@ describe('Unimplemented File Adapter methods', () => { e = await getEnforcerWithPath('examples/basic_model.conf', a); }); - test('addPolicy', async () => { - await expect(a.addPolicy('', '', [''])).rejects.toThrow('not implemented'); - }); - - test('removePolicy', async () => { - await expect(a.removePolicy('', '', [''])).rejects.toThrow('not implemented'); - }); - test('removeFilteredPolicy', async () => { await expect(a.removeFilteredPolicy('', '', 0, '')).rejects.toThrow('not implemented'); }); @@ -536,14 +528,6 @@ describe('Unimplemented String Adapter methods', () => { await expect(a.savePolicy(e.getModel())).rejects.toThrow('not implemented'); }); - test('addPolicy', async () => { - await expect(a.addPolicy('', '', [''])).rejects.toThrow('not implemented'); - }); - - test('removePolicy', async () => { - await expect(a.removePolicy('', '', [''])).rejects.toThrow('not implemented'); - }); - test('removeFilteredPolicy', async () => { await expect(a.removeFilteredPolicy('', '', 0, '')).rejects.toThrow('not implemented'); }); diff --git a/test/persist/stringAdapter.test.ts b/test/persist/stringAdapter.test.ts new file mode 100644 index 00000000..badd8206 --- /dev/null +++ b/test/persist/stringAdapter.test.ts @@ -0,0 +1,24 @@ +import { StringAdapter } from '../../src/persist'; + +test('addPolicy', async () => { + const e = new StringAdapter(''); + const p = ['eve', 'data3', 'read']; + await e.addPolicy('p', 'p', p); + expect(await e.getPolicy()).toBe('p, eve, data3, read'); + + await e.removePolicy('p', 'p', p); + expect(await e.getPolicy()).toBe(''); +}); + +test('addPolicies', async () => { + const e = new StringAdapter(''); + const p = [ + ['eve', 'data3', 'read'], + ['eve', 'data4', 'read'], + ]; + await e.addPolicies('p', 'p', p); + expect(await e.getPolicy()).toBe('p, eve, data3, read' + '\n' + 'p, eve, data4, read'); + + await e.removePolicies('p', 'p', p); + expect(await e.getPolicy()).toBe(''); +}); From 82124e3dccfbee9a2a9b75606ff1d4d2c4c03202 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 1 Aug 2021 18:18:33 +0800 Subject: [PATCH 467/497] fix: fix logic error and add unittests Signed-off-by: Zxilly --- src/persist/stringAdapter.ts | 54 +++++-- test/enforcer.test.ts | 14 +- test/managementAPI.test.ts | 224 ++++++++++++++--------------- test/persist/stringAdapter.test.ts | 24 ---- 4 files changed, 160 insertions(+), 156 deletions(-) delete mode 100644 test/persist/stringAdapter.test.ts diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 3983dc70..750141dc 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -3,6 +3,7 @@ import { Model } from '../model'; import { Helper } from './helper'; import { BatchAdapter } from './batchAdapter'; import * as util from '../util'; +import { arrayEquals } from '../util'; /** * StringAdapter is the string adapter for Casbin. @@ -10,7 +11,7 @@ import * as util from '../util'; */ export class StringAdapter implements Adapter, BatchAdapter { public policy: string; - private policies: string[][] = new Array>(); + private policies: string[][] = []; /** * StringAdapter is the constructor for StringAdapter. @@ -21,6 +22,19 @@ export class StringAdapter implements Adapter, BatchAdapter { this.policy = policy; } + /** + * hasPolicy checks if specific policy exists in storage. + */ + public hasPolicy(policy: string[]): boolean { + return this.policies.some((prePolicy) => { + return util.arrayEquals(prePolicy, policy); + }); + } + + /** + * loadPolicy loads data in adapter to model. + * @param model + */ public async loadPolicy(model: Model): Promise { if (!this.policy) { return; @@ -42,16 +56,19 @@ export class StringAdapter implements Adapter, BatchAdapter { * savePolicy saves all policy rules to the storage. */ public async savePolicy(model: Model): Promise { - throw new Error('not implemented'); + this.policy = await this.getPolicy(); + return true; } /** * addPolicy adds a policy rule to the storage. */ public async addPolicy(sec: string, ptype: string, rule: string[]): Promise { - const ruleClone = rule.slice(); - ruleClone.unshift(ptype); - this.policies.push(ruleClone); + const policy = rule.slice(); + policy.unshift(ptype); + if (!this.hasPolicy(rule)) { + this.policies.push(policy); + } } /** @@ -60,13 +77,19 @@ export class StringAdapter implements Adapter, BatchAdapter { public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { const ruleClone = rule.slice(); ruleClone.unshift(ptype); - this.policies = this.policies.filter((r) => !util.arrayEquals(ruleClone, r)); + this.policies.filter((r) => !util.arrayEquals(ruleClone, r)); } + /** + * getPolicy get the storage string + */ public async getPolicy(): Promise { return this.policies.map((p) => p.join(', ')).join('\n'); } + /** + * getPolicies get policies array + */ public async getPolicies(): Promise { return this.policies; } @@ -78,15 +101,24 @@ export class StringAdapter implements Adapter, BatchAdapter { throw new Error('not implemented'); } + /** + * addPolicies adds policy rules to the storage. + */ public async addPolicies(sec: string, ptype: string, rules: string[][]): Promise { - rules.forEach((rule) => { - this.addPolicy(sec, ptype, rule); - }); + for (const rule of rules) { + if (!this.hasPolicy(rule)) { + await this.addPolicy(sec, ptype, rule); + } + } } + /** + * removePolicies removes policy rules from the storage. + * This is part of the Auto-Save feature. + */ public async removePolicies(sec: string, ptype: string, rules: string[][]): Promise { - rules.forEach((rule) => { - this.removePolicy(sec, ptype, rule); + this.policies = this.policies.filter((rule) => { + return !rules.some((deleteRule) => arrayEquals(deleteRule, rule)); }); } } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 4fd4c22b..f070c183 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -276,11 +276,11 @@ test('TestReloadPolicy', async () => { ]); }); -// test('TestSavePolicy', async () => { -// const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); -// -// await e.savePolicy(); -// }); TODO: implement this +test('TestSavePolicy', async () => { + const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); + + await e.savePolicy(); +}); test('TestClearPolicy', async () => { const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); @@ -524,10 +524,6 @@ describe('Unimplemented String Adapter methods', () => { e = await getEnforcerWithPath('examples/basic_model.conf', a); }); - test('savePolicy', async () => { - await expect(a.savePolicy(e.getModel())).rejects.toThrow('not implemented'); - }); - test('removeFilteredPolicy', async () => { await expect(a.removeFilteredPolicy('', '', 0, '')).rejects.toThrow('not implemented'); }); diff --git a/test/managementAPI.test.ts b/test/managementAPI.test.ts index b61a4715..88b85dad 100644 --- a/test/managementAPI.test.ts +++ b/test/managementAPI.test.ts @@ -13,7 +13,7 @@ // limitations under the License. import { Enforcer, Util } from '../src'; -import { getEnforcerWithPath } from './utils'; +import { getEnforcerWithPath, getStringAdapter } from './utils'; let e = {} as Enforcer; @@ -146,21 +146,21 @@ test('addPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(true); }); -// test('addPolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const rules = [ -// ['jack', 'data4', 'read'], -// ['katy', 'data4', 'write'], -// ['leyo', 'data4', 'read'], -// ['ham', 'data4', 'write'], -// ]; -// const added = await e.addPolicies(rules); -// expect(added).toBe(true); -// for (const rule of rules) { -// expect(await e.hasPolicy(...rule)).toBe(true); -// } -// }); TODO: implement this for StringAdapter +test('addPolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'], + ]; + const added = await e.addPolicies(rules); + expect(added).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(true); + } +}); test('addNamedPolicy', async () => { const p = ['eve', 'data3', 'read']; @@ -169,21 +169,21 @@ test('addNamedPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(true); }); -// test('addNamedPolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const rules = [ -// ['jack', 'data4', 'read'], -// ['katy', 'data4', 'write'], -// ['leyo', 'data4', 'read'], -// ['ham', 'data4', 'write'], -// ]; -// const added = await e.addNamedPolicies('p', rules); -// expect(added).toBe(true); -// for (const rule of rules) { -// expect(await e.hasPolicy(...rule)).toBe(true); -// } -// }); TODO: implement this for StringAdapter +test('addNamedPolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'], + ]; + const added = await e.addNamedPolicies('p', rules); + expect(added).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(true); + } +}); // test('updatePolicy', async () => { // const a = getStringAdapter('examples/rbac_policy.csv'); @@ -194,8 +194,8 @@ test('addNamedPolicy', async () => { // expect(updated).toBe(true); // expect(await e.hasPolicy(...p)).toBe(false); // expect(await e.hasPolicy(...q)).toBe(true); -// }); TODO: implement this for StringAdapter - +// }); +// // test('updateNamedPolicy', async () => { // const a = getStringAdapter('examples/rbac_policy.csv'); // e.setAdapter(a); @@ -205,7 +205,7 @@ test('addNamedPolicy', async () => { // expect(updated).toBe(true); // expect(await e.hasPolicy(...p)).toBe(false); // expect(await e.hasPolicy(...q)).toBe(true); -// }); TODO: implement this for StringAdapter +// }); // TODO: implement Updatable Interface test('removePolicy', async () => { const p = ['alice', 'data1', 'read']; @@ -214,23 +214,23 @@ test('removePolicy', async () => { expect(await e.hasPolicy(...p)).toBe(false); }); -// test('removePolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const rules = [ -// ['jack', 'data4', 'read'], -// ['katy', 'data4', 'write'], -// ['leyo', 'data4', 'read'], -// ['ham', 'data4', 'write'], -// ]; -// const added = await e.addPolicies(rules); -// expect(added).toBe(true); -// const removed = await e.removePolicies(rules); -// expect(removed).toBe(true); -// for (const rule of rules) { -// expect(await e.hasPolicy(...rule)).toBe(false); -// } -// }); TODO: implement this for StringAdapter +test('removePolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'], + ]; + const added = await e.addPolicies(rules); + expect(added).toBe(true); + const removed = await e.removePolicies(rules); + expect(removed).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(false); + } +}); test('removeFilteredPolicy', async () => { const p = ['alice', 'data1', 'read']; @@ -246,23 +246,23 @@ test('removeNamedPolicy', async () => { expect(await e.hasPolicy(...p)).toBe(false); }); -// test('removeNamedPolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const rules = [ -// ['jack', 'data4', 'read'], -// ['katy', 'data4', 'write'], -// ['leyo', 'data4', 'read'], -// ['ham', 'data4', 'write'], -// ]; -// const added = await e.addPolicies(rules); -// expect(added).toBe(true); -// const removed = await e.removeNamedPolicies('p', rules); -// expect(removed).toBe(true); -// for (const rule of rules) { -// expect(await e.hasPolicy(...rule)).toBe(false); -// } -// }); TODO: implement this for StringAdapter +test('removeNamedPolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const rules = [ + ['jack', 'data4', 'read'], + ['katy', 'data4', 'write'], + ['leyo', 'data4', 'read'], + ['ham', 'data4', 'write'], + ]; + const added = await e.addPolicies(rules); + expect(added).toBe(true); + const removed = await e.removeNamedPolicies('p', rules); + expect(removed).toBe(true); + for (const rule of rules) { + expect(await e.hasPolicy(...rule)).toBe(false); + } +}); test('removeFilteredNamedPolicy', async () => { const p = ['alice', 'data1', 'read']; @@ -286,50 +286,50 @@ test('addGroupingPolicy', async () => { expect(added).toBe(true); }); -// test('addGroupingPolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const groupingRules = [ -// ['ham', 'data4_admin'], -// ['jack', 'data5_admin'], -// ]; -// const added = await e.addGroupingPolicies(groupingRules); -// expect(added).toBe(true); -// }); TODO: implement this for StringAdapter +test('addGroupingPolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'], + ]; + const added = await e.addGroupingPolicies(groupingRules); + expect(added).toBe(true); +}); test('addNamedGroupingPolicy', async () => { const added = await e.addNamedGroupingPolicy('g', 'group1', 'data2_admin'); expect(added).toBe(true); }); -// test('addNamedGroupingPolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const groupingRules = [ -// ['ham', 'data4_admin'], -// ['jack', 'data5_admin'], -// ]; -// const added = await e.addNamedGroupingPolicies('g', groupingRules); -// expect(added).toBe(true); -// }); TODO: implement this for StringAdapter +test('addNamedGroupingPolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'], + ]; + const added = await e.addNamedGroupingPolicies('g', groupingRules); + expect(added).toBe(true); +}); test('removeGroupingPolicy', async () => { const removed = await e.removeGroupingPolicy('alice', 'data2_admin'); expect(removed).toBe(true); }); -// test('removeGroupingPolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const groupingRules = [ -// ['ham', 'data4_admin'], -// ['jack', 'data5_admin'], -// ]; -// const added = await e.addGroupingPolicies(groupingRules); -// expect(added).toBe(true); -// const removed = await e.removeGroupingPolicies(groupingRules); -// expect(removed).toBe(true); -// }); TODO: implement this for StringAdapter +test('removeGroupingPolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'], + ]; + const added = await e.addGroupingPolicies(groupingRules); + expect(added).toBe(true); + const removed = await e.removeGroupingPolicies(groupingRules); + expect(removed).toBe(true); +}); test('removeFilteredGroupingPolicy', async () => { const removed = await e.removeFilteredGroupingPolicy(0, 'alice'); @@ -341,15 +341,15 @@ test('removeFilteredNamedGroupingPolicy', async () => { expect(removed).toBe(true); }); -// test('removeNamedGroupingPolicies', async () => { -// const a = getStringAdapter('examples/rbac_policy.csv'); -// e.setAdapter(a); -// const groupingRules = [ -// ['ham', 'data4_admin'], -// ['jack', 'data5_admin'], -// ]; -// const added = await e.addGroupingPolicies(groupingRules); -// expect(added).toBe(true); -// const removed = await e.removeNamedGroupingPolicies('g', groupingRules); -// expect(removed).toBe(true); -// }); TODO: implement this for StringAdapter +test('removeNamedGroupingPolicies', async () => { + const a = getStringAdapter('examples/rbac_policy.csv'); + e.setAdapter(a); + const groupingRules = [ + ['ham', 'data4_admin'], + ['jack', 'data5_admin'], + ]; + const added = await e.addGroupingPolicies(groupingRules); + expect(added).toBe(true); + const removed = await e.removeNamedGroupingPolicies('g', groupingRules); + expect(removed).toBe(true); +}); diff --git a/test/persist/stringAdapter.test.ts b/test/persist/stringAdapter.test.ts deleted file mode 100644 index badd8206..00000000 --- a/test/persist/stringAdapter.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { StringAdapter } from '../../src/persist'; - -test('addPolicy', async () => { - const e = new StringAdapter(''); - const p = ['eve', 'data3', 'read']; - await e.addPolicy('p', 'p', p); - expect(await e.getPolicy()).toBe('p, eve, data3, read'); - - await e.removePolicy('p', 'p', p); - expect(await e.getPolicy()).toBe(''); -}); - -test('addPolicies', async () => { - const e = new StringAdapter(''); - const p = [ - ['eve', 'data3', 'read'], - ['eve', 'data4', 'read'], - ]; - await e.addPolicies('p', 'p', p); - expect(await e.getPolicy()).toBe('p, eve, data3, read' + '\n' + 'p, eve, data4, read'); - - await e.removePolicies('p', 'p', p); - expect(await e.getPolicy()).toBe(''); -}); From 32ec20d07ff1c0f21c910a450398d7163ca1d1be Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 1 Aug 2021 18:22:05 +0800 Subject: [PATCH 468/497] fix: use csv-like format Signed-off-by: Zxilly --- src/persist/stringAdapter.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/persist/stringAdapter.ts b/src/persist/stringAdapter.ts index 750141dc..7b1c152e 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/stringAdapter.ts @@ -84,7 +84,15 @@ export class StringAdapter implements Adapter, BatchAdapter { * getPolicy get the storage string */ public async getPolicy(): Promise { - return this.policies.map((p) => p.join(', ')).join('\n'); + return this.policies + .map((p) => + p + .map((value) => { + return '"' + value + '"'; + }) + .join(', ') + ) + .join('\n'); } /** From 7ca1f2616f8f474ba521e8e1f8ac17b47c98b22a Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sun, 1 Aug 2021 18:32:20 +0800 Subject: [PATCH 469/497] refactor: remove syncdEnforcer prepare for totally refactor Signed-off-by: Zxilly --- src/index.ts | 1 - src/syncedEnforcer.ts | 508 ------------------------------------------ 2 files changed, 509 deletions(-) delete mode 100644 src/syncedEnforcer.ts diff --git a/src/index.ts b/src/index.ts index e451f21f..3c84ee36 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,6 @@ import * as Util from './util'; export * from './config'; export * from './enforcer'; export * from './cachedEnforcer'; -export * from './syncedEnforcer'; export * from './effect'; export * from './model'; export * from './persist'; diff --git a/src/syncedEnforcer.ts b/src/syncedEnforcer.ts deleted file mode 100644 index 45ad846a..00000000 --- a/src/syncedEnforcer.ts +++ /dev/null @@ -1,508 +0,0 @@ -// Copyright 2020 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import { Enforcer, newEnforcerWithClass } from './enforcer'; -import AwaitLock from 'await-lock'; -import { Watcher } from './persist'; -import { MatchingFunc } from './rbac'; - -// SyncedEnforcer wraps Enforcer and provides synchronized access -export class SyncedEnforcer extends Enforcer { - private lock = new AwaitLock(); - - /** - * setWatcher sets the current watcher. - * - * @param watcher the watcher. - */ - - public setWatcher(watcher: Watcher): void { - this.watcher = watcher; - this.watcher.setUpdateCallback(() => this.loadPolicy()); - } - - /** - * loadPolicy reloads the policy from file/database. - */ - public async loadPolicy(): Promise { - await this.lock.acquireAsync(); - return super.loadPolicy().finally(() => this.lock.release()); - } - - /** - * clearPolicy clears all policy. - */ - public clearPolicy(): void { - this.lock - .acquireAsync() - .then(() => super.clearPolicy()) - .finally(() => this.lock.release()); - } - - /** - * savePolicy saves the current policy (usually after changed with Casbin API) back to file/database. - */ - public async savePolicy(): Promise { - await this.lock.acquireAsync(); - return super.savePolicy().finally(() => this.lock.release()); - } - - /** - * buildRoleLinks manually rebuild the role inheritance relations. - */ - public async buildRoleLinks(): Promise { - await this.lock.acquireAsync(); - return super.buildRoleLinks().finally(() => this.lock.release()); - } - - /** - * If the matchers does not contain an asynchronous method, call it faster. - * - * enforceWithSyncCompile decides whether a "subject" can access a "object" with - * the operation "action", input parameters are usually: (sub, obj, act). - * - * @param rvals the request needs to be mediated, usually an array - * of strings, can be class instances if ABAC is used. - * @return whether to allow the request. - */ - public enforceWithSyncCompile(...rvals: any[]): boolean { - return super.enforceWithSyncCompile(...rvals); - } - - /** - * enforce decides whether a "subject" can access a "object" with - * the operation "action", input parameters are usually: (sub, obj, act). - * - * @param rvals the request needs to be mediated, usually an array - * of strings, can be class instances if ABAC is used. - * @return whether to allow the request. - */ - public async enforce(...rvals: any[]): Promise { - await this.lock.acquireAsync(); - return super.enforce(...rvals).finally(() => this.lock.release()); - } - - /** - * getAllSubjects gets the list of subjects that show up in the current policy. - * - * @return all the subjects in "p" policy rules. It actually collects the - * 0-index elements of "p" policy rules. So make sure your subject - * is the 0-index element, like (sub, obj, act). Duplicates are removed. - */ - public async getAllSubjects(): Promise { - return this.getAllNamedSubjects('p'); - } - - /** - * getAllNamedSubjects gets the list of subjects that show up in the currentnamed policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return all the subjects in policy rules of the ptype type. It actually - * collects the 0-index elements of the policy rules. So make sure - * your subject is the 0-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public async getAllNamedSubjects(ptype: string): Promise { - await this.lock.acquireAsync(); - return super.getAllNamedSubjects(ptype).finally(() => this.lock.release()); - } - - /** - * getAllObjects gets the list of objects that show up in the current policy. - * - * @return all the objects in "p" policy rules. It actually collects the - * 1-index elements of "p" policy rules. So make sure your object - * is the 1-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public async getAllObjects(): Promise { - return this.getAllNamedObjects('p'); - } - - /** - * getAllNamedObjects gets the list of objects that show up in the current named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return all the objects in policy rules of the ptype type. It actually - * collects the 1-index elements of the policy rules. So make sure - * your object is the 1-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public async getAllNamedObjects(ptype: string): Promise { - await this.lock.acquireAsync(); - return super.getAllNamedObjects(ptype).finally(() => this.lock.release()); - } - - /** - * getAllActions gets the list of actions that show up in the current policy. - * - * @return all the actions in "p" policy rules. It actually collects - * the 2-index elements of "p" policy rules. So make sure your action - * is the 2-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public async getAllActions(): Promise { - return this.getAllNamedActions('p'); - } - - /** - * GetAllNamedActions gets the list of actions that show up in the current named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return all the actions in policy rules of the ptype type. It actually - * collects the 2-index elements of the policy rules. So make sure - * your action is the 2-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public async getAllNamedActions(ptype: string): Promise { - await this.lock.acquireAsync(); - return super.getAllNamedActions(ptype).finally(() => this.lock.release()); - } - - /** - * getAllRoles gets the list of roles that show up in the current policy. - * - * @return all the roles in "g" policy rules. It actually collects - * the 1-index elements of "g" policy rules. So make sure your - * role is the 1-index element, like (sub, role). - * Duplicates are removed. - */ - public async getAllRoles(): Promise { - return this.getAllNamedRoles('g'); - } - - /** - * getAllNamedRoles gets the list of roles that show up in the current named policy. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @return all the subjects in policy rules of the ptype type. It actually - * collects the 0-index elements of the policy rules. So make - * sure your subject is the 0-index element, like (sub, obj, act). - * Duplicates are removed. - */ - public async getAllNamedRoles(ptype: string): Promise { - await this.lock.acquireAsync(); - return super.getAllNamedRoles(ptype).finally(() => this.lock.release()); - } - - /** - * getPolicy gets all the authorization rules in the policy. - * - * @return all the "p" policy rules. - */ - public async getPolicy(): Promise { - return this.getNamedPolicy('p'); - } - - /** - * getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return the filtered "p" policy rules. - */ - public async getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); - } - - /** - * getNamedPolicy gets all the authorization rules in the named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @return the "p" policy rules of the specified ptype. - */ - public async getNamedPolicy(ptype: string): Promise { - await this.lock.acquireAsync(); - return super.getNamedPolicy(ptype).finally(() => this.lock.release()); - } - - /** - * getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return the filtered "p" policy rules of the specified ptype. - */ - public async getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - await this.lock.acquireAsync(); - return super.getFilteredNamedPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); - } - - /** - * getGroupingPolicy gets all the role inheritance rules in the policy. - * - * @return all the "g" policy rules. - */ - public async getGroupingPolicy(): Promise { - return this.getNamedGroupingPolicy('g'); - } - - /** - * getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" means not to match this field. - * @return the filtered "g" policy rules. - */ - public async getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); - } - - /** - * getNamedGroupingPolicy gets all the role inheritance rules in the policy. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @return the "g" policy rules of the specified ptype. - */ - public async getNamedGroupingPolicy(ptype: string): Promise { - await this.lock.acquireAsync(); - return super.getNamedGroupingPolicy(ptype).finally(() => this.lock.release()); - } - - /** - * getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return the filtered "g" policy rules of the specified ptype. - */ - public async getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - await this.lock.acquireAsync(); - return super.getFilteredNamedGroupingPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); - } - - /** - * hasPolicy determines whether an authorization rule exists. - * - * @param params the "p" policy rule, ptype "p" is implicitly used. - * @return whether the rule exists. - */ - public async hasPolicy(...params: string[]): Promise { - return this.hasNamedPolicy('p', ...params); - } - - /** - * hasNamedPolicy determines whether a named authorization rule exists. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param params the "p" policy rule. - * @return whether the rule exists. - */ - public async hasNamedPolicy(ptype: string, ...params: string[]): Promise { - await this.lock.acquireAsync(); - return super.hasNamedPolicy(ptype, ...params).finally(() => this.lock.release()); - } - - /** - * addPolicy adds an authorization rule to the current policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param params the "p" policy rule, ptype "p" is implicitly used. - * @return succeeds or not. - */ - public async addPolicy(...params: string[]): Promise { - return this.addNamedPolicy('p', ...params); - } - - /** - * addNamedPolicy adds an authorization rule to the current named policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param params the "p" policy rule. - * @return succeeds or not. - */ - public async addNamedPolicy(ptype: string, ...params: string[]): Promise { - await this.lock.acquireAsync(); - return super.addNamedPolicy(ptype, ...params).finally(() => this.lock.release()); - } - - /** - * removePolicy removes an authorization rule from the current policy. - * - * @param params the "p" policy rule, ptype "p" is implicitly used. - * @return succeeds or not. - */ - public async removePolicy(...params: string[]): Promise { - return this.removeNamedPolicy('p', ...params); - } - - /** - * removeFilteredPolicy removes an authorization rule from the current policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return this.removeFilteredNamedPolicy('p', fieldIndex, ...fieldValues); - } - - /** - * removeNamedPolicy removes an authorization rule from the current named policy. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param params the "p" policy rule. - * @return succeeds or not. - */ - public async removeNamedPolicy(ptype: string, ...params: string[]): Promise { - await this.lock.acquireAsync(); - return this.removePolicyInternal('p', ptype, params).finally(() => this.lock.release()); - } - - /** - * removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. - * - * @param ptype the policy type, can be "p", "p2", "p3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - await this.lock.acquireAsync(); - return super.removeFilteredNamedPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); - } - - /** - * hasGroupingPolicy determines whether a role inheritance rule exists. - * - * @param params the "g" policy rule, ptype "g" is implicitly used. - * @return whether the rule exists. - */ - public async hasGroupingPolicy(...params: string[]): Promise { - return this.hasNamedGroupingPolicy('g', ...params); - } - - /** - * hasNamedGroupingPolicy determines whether a named role inheritance rule exists. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param params the "g" policy rule. - * @return whether the rule exists. - */ - public async hasNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - await this.lock.acquireAsync(); - return super.hasNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); - } - - /** - * addGroupingPolicy adds a role inheritance rule to the current policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param params the "g" policy rule, ptype "g" is implicitly used. - * @return succeeds or not. - */ - public async addGroupingPolicy(...params: string[]): Promise { - return this.addNamedGroupingPolicy('g', ...params); - } - - /** - * addNamedGroupingPolicy adds a named role inheritance rule to the current policy. - * If the rule already exists, the function returns false and the rule will not be added. - * Otherwise the function returns true by adding the new rule. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param params the "g" policy rule. - * @return succeeds or not. - */ - public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - await this.lock.acquireAsync(); - return super.addNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); - } - - /** - * removeGroupingPolicy removes a role inheritance rule from the current policy. - * - * @param params the "g" policy rule, ptype "g" is implicitly used. - * @return succeeds or not. - */ - public async removeGroupingPolicy(...params: string[]): Promise { - return this.removeNamedGroupingPolicy('g', ...params); - } - - /** - * removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. - * - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { - return this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); - } - - /** - * removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param params the "g" policy rule. - * @return succeeds or not. - */ - public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { - await this.lock.acquireAsync(); - return super.removeNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); - } - - /** - * removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. - * - * @param ptype the policy type, can be "g", "g2", "g3", .. - * @param fieldIndex the policy rule's start index to be matched. - * @param fieldValues the field values to be matched, value "" - * means not to match this field. - * @return succeeds or not. - */ - public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { - await this.lock.acquireAsync(); - return super.removeFilteredNamedGroupingPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); - } - - /** - * add matching function to RoleManager by ptype - * @param ptype g - * @param fn the function will be added - */ - public async addNamedMatchingFunc(ptype: string, fn: MatchingFunc): Promise { - await this.lock.acquireAsync(); - return super.addNamedMatchingFunc(ptype, fn).finally(() => this.lock.release()); - } - - /** - * add domain matching function to RoleManager by ptype - * @param ptype g - * @param fn the function will be added - */ - public async addNamedDomainMatchingFunc(ptype: string, fn: MatchingFunc): Promise { - await this.lock.acquireAsync(); - return super.addNamedDomainMatchingFunc(ptype, fn).finally(() => { - this.lock.release(); - }); - } -} - -// newSyncedEnforcer creates a synchronized enforcer via file or DB. -export async function newSyncedEnforcer(...params: any[]): Promise { - return newEnforcerWithClass(SyncedEnforcer, ...params); -} From e71b40fc1917f1f8bd4f64d24372f6044c052102 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 2 Aug 2021 23:14:03 +0800 Subject: [PATCH 470/497] feat: add policyArrayToString and policyStringToArray to util Signed-off-by: Zixuan Liu --- src/persist/helper.ts | 15 ++------------- src/util/util.ts | 21 +++++++++++++++++++++ test/util.test.ts | 15 +++++++++++++++ tsconfig.json | 3 ++- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/persist/helper.ts b/src/persist/helper.ts index 3645c4c9..5e944abb 100644 --- a/src/persist/helper.ts +++ b/src/persist/helper.ts @@ -1,4 +1,5 @@ import { Model } from '../model'; +import { policyStringToArray } from '../util'; export class Helper { public static loadPolicyLine(line: string, model: Model): void { @@ -6,19 +7,7 @@ export class Helper { return; } - let tokens: any = undefined; - - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const parse = require('csv-parse/lib/sync'); - tokens = parse(line, { - delimiter: ',', - skip_empty_lines: true, - trim: true, - }); - } catch { - throw new Error('Please add csv-parse to your dependency.'); - } + const tokens = policyStringToArray(line); if (!tokens || !tokens[0]) { return; diff --git a/src/util/util.ts b/src/util/util.ts index 42ac081b..18492865 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -14,6 +14,9 @@ // escapeAssertion escapes the dots in the assertion, // because the expression evaluation doesn't support such variable names. + +import parse from 'csv-parse/lib/sync'; + function escapeAssertion(s: string): string { s = s.replace(/r\./g, 'r_'); s = s.replace(/p\./g, 'p_'); @@ -144,6 +147,22 @@ function deepCopy(obj: Array | any): any { return newObj; } +function policyArrayToString(policy: string[]): string { + return policy + .map((n) => { + return `"${(n === null ? '' : n.toString()).replace(/"/g, '""')}"`; + }) + .join(','); +} + +function policyStringToArray(policy: string): string[][] { + return parse(policy, { + delimiter: ',', + skip_empty_lines: true, + trim: true, + }); +} + export { escapeAssertion, removeComments, @@ -159,4 +178,6 @@ export { generatorRunSync, generatorRunAsync, deepCopy, + policyArrayToString, + policyStringToArray, }; diff --git a/test/util.test.ts b/test/util.test.ts index 722d9485..fd2a33fd 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -155,3 +155,18 @@ test('test getEvalValue', () => { expect(util.arrayEquals(util.getEvalValue('eval(a) && eval(b) && a && b && c'), ['a', 'b'])); expect(util.arrayEquals(util.getEvalValue('a && eval(a) && eval(b) && b && c'), ['a', 'b'])); }); + +test('test policyStringToArray', () => { + expect(util.policyStringToArray('p,alice,data1,read')).toEqual([['p', 'alice', 'data1', 'read']]); + expect(util.policyStringToArray(`"p","alice","data1","read"`)).toEqual([['p', 'alice', 'data1', 'read']]); + expect(util.policyStringToArray(`"p"," alice","data1 ","read"`)).toEqual([['p', ' alice', 'data1 ', 'read']]); + expect(util.policyStringToArray(`p,alice,data1,read\np,bob,data1,write`)).toEqual([ + ['p', 'alice', 'data1', 'read'], + ['p', 'bob', 'data1', 'write'], + ]); +}); + +test('test policyArrayToString', () => { + expect(util.policyArrayToString(['p', 'alice', 'data1', 'read'])).toEqual(`"p","alice","data1","read"`); + expect(util.policyArrayToString(['p', 'alice ', ' data1', 'read'])).toEqual(`"p","alice "," data1","read"`); +}); diff --git a/tsconfig.json b/tsconfig.json index cd2044e4..db565bf0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,8 @@ "strictPropertyInitialization": false, "declaration": true, "downlevelIteration": true, - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "esModuleInterop": true }, "include": ["src/**/*", "test/utils.ts"] } From 577d4c58958fc5683107a5e9f7bab1873b321b84 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Mon, 16 Aug 2021 22:36:17 +0800 Subject: [PATCH 471/497] Revert "refactor: remove syncdEnforcer" --- src/index.ts | 1 + src/syncedEnforcer.ts | 508 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 509 insertions(+) create mode 100644 src/syncedEnforcer.ts diff --git a/src/index.ts b/src/index.ts index 3c84ee36..e451f21f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,6 +17,7 @@ import * as Util from './util'; export * from './config'; export * from './enforcer'; export * from './cachedEnforcer'; +export * from './syncedEnforcer'; export * from './effect'; export * from './model'; export * from './persist'; diff --git a/src/syncedEnforcer.ts b/src/syncedEnforcer.ts new file mode 100644 index 00000000..45ad846a --- /dev/null +++ b/src/syncedEnforcer.ts @@ -0,0 +1,508 @@ +// Copyright 2020 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Enforcer, newEnforcerWithClass } from './enforcer'; +import AwaitLock from 'await-lock'; +import { Watcher } from './persist'; +import { MatchingFunc } from './rbac'; + +// SyncedEnforcer wraps Enforcer and provides synchronized access +export class SyncedEnforcer extends Enforcer { + private lock = new AwaitLock(); + + /** + * setWatcher sets the current watcher. + * + * @param watcher the watcher. + */ + + public setWatcher(watcher: Watcher): void { + this.watcher = watcher; + this.watcher.setUpdateCallback(() => this.loadPolicy()); + } + + /** + * loadPolicy reloads the policy from file/database. + */ + public async loadPolicy(): Promise { + await this.lock.acquireAsync(); + return super.loadPolicy().finally(() => this.lock.release()); + } + + /** + * clearPolicy clears all policy. + */ + public clearPolicy(): void { + this.lock + .acquireAsync() + .then(() => super.clearPolicy()) + .finally(() => this.lock.release()); + } + + /** + * savePolicy saves the current policy (usually after changed with Casbin API) back to file/database. + */ + public async savePolicy(): Promise { + await this.lock.acquireAsync(); + return super.savePolicy().finally(() => this.lock.release()); + } + + /** + * buildRoleLinks manually rebuild the role inheritance relations. + */ + public async buildRoleLinks(): Promise { + await this.lock.acquireAsync(); + return super.buildRoleLinks().finally(() => this.lock.release()); + } + + /** + * If the matchers does not contain an asynchronous method, call it faster. + * + * enforceWithSyncCompile decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ + public enforceWithSyncCompile(...rvals: any[]): boolean { + return super.enforceWithSyncCompile(...rvals); + } + + /** + * enforce decides whether a "subject" can access a "object" with + * the operation "action", input parameters are usually: (sub, obj, act). + * + * @param rvals the request needs to be mediated, usually an array + * of strings, can be class instances if ABAC is used. + * @return whether to allow the request. + */ + public async enforce(...rvals: any[]): Promise { + await this.lock.acquireAsync(); + return super.enforce(...rvals).finally(() => this.lock.release()); + } + + /** + * getAllSubjects gets the list of subjects that show up in the current policy. + * + * @return all the subjects in "p" policy rules. It actually collects the + * 0-index elements of "p" policy rules. So make sure your subject + * is the 0-index element, like (sub, obj, act). Duplicates are removed. + */ + public async getAllSubjects(): Promise { + return this.getAllNamedSubjects('p'); + } + + /** + * getAllNamedSubjects gets the list of subjects that show up in the currentnamed policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make sure + * your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedSubjects(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedSubjects(ptype).finally(() => this.lock.release()); + } + + /** + * getAllObjects gets the list of objects that show up in the current policy. + * + * @return all the objects in "p" policy rules. It actually collects the + * 1-index elements of "p" policy rules. So make sure your object + * is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllObjects(): Promise { + return this.getAllNamedObjects('p'); + } + + /** + * getAllNamedObjects gets the list of objects that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the objects in policy rules of the ptype type. It actually + * collects the 1-index elements of the policy rules. So make sure + * your object is the 1-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedObjects(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedObjects(ptype).finally(() => this.lock.release()); + } + + /** + * getAllActions gets the list of actions that show up in the current policy. + * + * @return all the actions in "p" policy rules. It actually collects + * the 2-index elements of "p" policy rules. So make sure your action + * is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllActions(): Promise { + return this.getAllNamedActions('p'); + } + + /** + * GetAllNamedActions gets the list of actions that show up in the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return all the actions in policy rules of the ptype type. It actually + * collects the 2-index elements of the policy rules. So make sure + * your action is the 2-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedActions(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedActions(ptype).finally(() => this.lock.release()); + } + + /** + * getAllRoles gets the list of roles that show up in the current policy. + * + * @return all the roles in "g" policy rules. It actually collects + * the 1-index elements of "g" policy rules. So make sure your + * role is the 1-index element, like (sub, role). + * Duplicates are removed. + */ + public async getAllRoles(): Promise { + return this.getAllNamedRoles('g'); + } + + /** + * getAllNamedRoles gets the list of roles that show up in the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return all the subjects in policy rules of the ptype type. It actually + * collects the 0-index elements of the policy rules. So make + * sure your subject is the 0-index element, like (sub, obj, act). + * Duplicates are removed. + */ + public async getAllNamedRoles(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getAllNamedRoles(ptype).finally(() => this.lock.release()); + } + + /** + * getPolicy gets all the authorization rules in the policy. + * + * @return all the "p" policy rules. + */ + public async getPolicy(): Promise { + return this.getNamedPolicy('p'); + } + + /** + * getFilteredPolicy gets all the authorization rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules. + */ + public async getFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.getFilteredNamedPolicy('p', fieldIndex, ...fieldValues); + } + + /** + * getNamedPolicy gets all the authorization rules in the named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @return the "p" policy rules of the specified ptype. + */ + public async getNamedPolicy(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getNamedPolicy(ptype).finally(() => this.lock.release()); + } + + /** + * getFilteredNamedPolicy gets all the authorization rules in the named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "p" policy rules of the specified ptype. + */ + public async getFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.getFilteredNamedPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } + + /** + * getGroupingPolicy gets all the role inheritance rules in the policy. + * + * @return all the "g" policy rules. + */ + public async getGroupingPolicy(): Promise { + return this.getNamedGroupingPolicy('g'); + } + + /** + * getFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" means not to match this field. + * @return the filtered "g" policy rules. + */ + public async getFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.getFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + /** + * getNamedGroupingPolicy gets all the role inheritance rules in the policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @return the "g" policy rules of the specified ptype. + */ + public async getNamedGroupingPolicy(ptype: string): Promise { + await this.lock.acquireAsync(); + return super.getNamedGroupingPolicy(ptype).finally(() => this.lock.release()); + } + + /** + * getFilteredNamedGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return the filtered "g" policy rules of the specified ptype. + */ + public async getFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.getFilteredNamedGroupingPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } + + /** + * hasPolicy determines whether an authorization rule exists. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return whether the rule exists. + */ + public async hasPolicy(...params: string[]): Promise { + return this.hasNamedPolicy('p', ...params); + } + + /** + * hasNamedPolicy determines whether a named authorization rule exists. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return whether the rule exists. + */ + public async hasNamedPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.hasNamedPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * addPolicy adds an authorization rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async addPolicy(...params: string[]): Promise { + return this.addNamedPolicy('p', ...params); + } + + /** + * addNamedPolicy adds an authorization rule to the current named policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ + public async addNamedPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.addNamedPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * removePolicy removes an authorization rule from the current policy. + * + * @param params the "p" policy rule, ptype "p" is implicitly used. + * @return succeeds or not. + */ + public async removePolicy(...params: string[]): Promise { + return this.removeNamedPolicy('p', ...params); + } + + /** + * removeFilteredPolicy removes an authorization rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.removeFilteredNamedPolicy('p', fieldIndex, ...fieldValues); + } + + /** + * removeNamedPolicy removes an authorization rule from the current named policy. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param params the "p" policy rule. + * @return succeeds or not. + */ + public async removeNamedPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return this.removePolicyInternal('p', ptype, params).finally(() => this.lock.release()); + } + + /** + * removeFilteredNamedPolicy removes an authorization rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "p", "p2", "p3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredNamedPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.removeFilteredNamedPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } + + /** + * hasGroupingPolicy determines whether a role inheritance rule exists. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return whether the rule exists. + */ + public async hasGroupingPolicy(...params: string[]): Promise { + return this.hasNamedGroupingPolicy('g', ...params); + } + + /** + * hasNamedGroupingPolicy determines whether a named role inheritance rule exists. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return whether the rule exists. + */ + public async hasNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.hasNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * addGroupingPolicy adds a role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async addGroupingPolicy(...params: string[]): Promise { + return this.addNamedGroupingPolicy('g', ...params); + } + + /** + * addNamedGroupingPolicy adds a named role inheritance rule to the current policy. + * If the rule already exists, the function returns false and the rule will not be added. + * Otherwise the function returns true by adding the new rule. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ + public async addNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.addNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * removeGroupingPolicy removes a role inheritance rule from the current policy. + * + * @param params the "g" policy rule, ptype "g" is implicitly used. + * @return succeeds or not. + */ + public async removeGroupingPolicy(...params: string[]): Promise { + return this.removeNamedGroupingPolicy('g', ...params); + } + + /** + * removeFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified. + * + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredGroupingPolicy(fieldIndex: number, ...fieldValues: string[]): Promise { + return this.removeFilteredNamedGroupingPolicy('g', fieldIndex, ...fieldValues); + } + + /** + * removeNamedGroupingPolicy removes a role inheritance rule from the current named policy. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param params the "g" policy rule. + * @return succeeds or not. + */ + public async removeNamedGroupingPolicy(ptype: string, ...params: string[]): Promise { + await this.lock.acquireAsync(); + return super.removeNamedGroupingPolicy(ptype, ...params).finally(() => this.lock.release()); + } + + /** + * removeFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified. + * + * @param ptype the policy type, can be "g", "g2", "g3", .. + * @param fieldIndex the policy rule's start index to be matched. + * @param fieldValues the field values to be matched, value "" + * means not to match this field. + * @return succeeds or not. + */ + public async removeFilteredNamedGroupingPolicy(ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise { + await this.lock.acquireAsync(); + return super.removeFilteredNamedGroupingPolicy(ptype, fieldIndex, ...fieldValues).finally(() => this.lock.release()); + } + + /** + * add matching function to RoleManager by ptype + * @param ptype g + * @param fn the function will be added + */ + public async addNamedMatchingFunc(ptype: string, fn: MatchingFunc): Promise { + await this.lock.acquireAsync(); + return super.addNamedMatchingFunc(ptype, fn).finally(() => this.lock.release()); + } + + /** + * add domain matching function to RoleManager by ptype + * @param ptype g + * @param fn the function will be added + */ + public async addNamedDomainMatchingFunc(ptype: string, fn: MatchingFunc): Promise { + await this.lock.acquireAsync(); + return super.addNamedDomainMatchingFunc(ptype, fn).finally(() => { + this.lock.release(); + }); + } +} + +// newSyncedEnforcer creates a synchronized enforcer via file or DB. +export async function newSyncedEnforcer(...params: any[]): Promise { + return newEnforcerWithClass(SyncedEnforcer, ...params); +} From 2bf42996d035eaa4dd659d781f2ce6b89fc396df Mon Sep 17 00:00:00 2001 From: Zxilly Date: Tue, 17 Aug 2021 17:56:56 +0800 Subject: [PATCH 472/497] feat: support RBAC for syncedEnforcer (#150) * feat: add full support for sync Enforcer Signed-off-by: Zxilly * refactor: add override sync function Signed-off-by: Zxilly * refactor: remove sync role manager interface Signed-off-by: Zxilly * fix: remove non-existent type Signed-off-by: Zxilly * feat: add setNamedRoleManager Signed-off-by: Zxilly * style: remove comment Signed-off-by: Zxilly * fix: fix functions Signed-off-by: Zxilly * fix: fix synced undefined Signed-off-by: Zxilly --- src/coreEnforcer.ts | 42 +++- src/enforcer.ts | 3 + src/internalEnforcer.ts | 4 +- src/model/assertion.ts | 7 +- src/model/functionMap.ts | 2 +- src/model/model.ts | 12 +- src/rbac/defaultRoleManager.ts | 344 ++------------------------ src/rbac/defaultSyncedRoleManager.ts | 44 ++++ src/rbac/index.ts | 2 + src/rbac/internalRoleManager.ts | 345 +++++++++++++++++++++++++++ src/rbac/roleManager.ts | 19 +- src/syncedEnforcer.ts | 16 +- src/util/builtinOperators.ts | 45 +++- src/util/ip.ts | 3 - src/util/util.ts | 11 + test/enforcer.test.ts | 4 +- test/model.test.ts | 2 +- test/rbac/defaultRoleManager.test.ts | 2 +- test/syncedEnforcer.test.ts | 89 +++++++ 19 files changed, 637 insertions(+), 359 deletions(-) create mode 100644 src/rbac/defaultSyncedRoleManager.ts create mode 100644 src/rbac/internalRoleManager.ts create mode 100644 test/syncedEnforcer.test.ts diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index a0243ef0..2f2638b6 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -18,7 +18,17 @@ import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; import { Adapter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; -import { escapeAssertion, generateGFunction, getEvalValue, hasEval, replaceEval, generatorRunSync, generatorRunAsync } from './util'; +import { + escapeAssertion, + generateGFunction, + getEvalValue, + hasEval, + replaceEval, + generatorRunSync, + generatorRunAsync, + generateSyncGFunction, + isRoleManagerSync, +} from './util'; import { getLogger, logPrint } from './log'; import { MatchingFunc } from './rbac'; @@ -38,7 +48,7 @@ export class CoreEnforcer { protected adapter: Adapter; protected watcher: Watcher | null = null; - protected rmMap: Map = new Map([['g', new DefaultRoleManager(10)]]); + protected rmMap: Map; protected enabled = true; protected autoSave = true; @@ -69,10 +79,18 @@ export class CoreEnforcer { */ public loadModel(): void { this.model = newModel(); + this.model.synced = false; this.model.loadModel(this.modelPath); this.model.printModel(); } + /** + * get a new RoleManager based on the type of current Enforcer + */ + public newRoleManager(): RoleManager { + return new DefaultRoleManager(10); + } + /** * getModel gets the current model. * @@ -128,11 +146,21 @@ export class CoreEnforcer { this.rmMap.set('g', rm); } + /** + * setRoleManager sets the current role manager. + * + * @param name + * @param rm the role manager. + */ + public setNamedRoleManager(name: string, rm: RoleManager): void { + this.rmMap.set(name, rm); + } + /** * getRoleManager gets the current role manager. */ - public getRoleManager(): RoleManager { - return this.rmMap.get('g'); + public getRoleManager(): RoleManager | undefined { + return this.rmMap.get('g'); } /** @@ -163,7 +191,7 @@ export class CoreEnforcer { const rm = this.model.model.get('g'); if (rm) { for (const ptype of rm.keys()) { - this.rmMap.set(ptype, new DefaultRoleManager(10)); + this.rmMap.set(ptype, this.newRoleManager()); } } } @@ -352,7 +380,7 @@ export class CoreEnforcer { public async buildIncrementalRoleLinks(op: PolicyOp, ptype: string, rules: string[][]): Promise { let rm = this.rmMap.get(ptype); if (!rm) { - rm = new DefaultRoleManager(10); + rm = this.newRoleManager(); this.rmMap.set(ptype, rm); } await this.model.buildIncrementalRoleLinks(rm, op, 'g', ptype, rules); @@ -381,7 +409,7 @@ export class CoreEnforcer { astMap?.forEach((value, key) => { const rm = value.rm; - functions[key] = generateGFunction(rm); + functions[key] = isRoleManagerSync(rm) ? generateSyncGFunction(rm) : generateGFunction(rm); }); const expString = this.model.model.get('m')?.get('m')?.value; diff --git a/src/enforcer.ts b/src/enforcer.ts index 46a9cf4c..def16153 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -17,6 +17,7 @@ import { Model, newModel } from './model'; import { Adapter, StringAdapter } from './persist'; import { getLogger } from './log'; import { arrayRemoveDuplicates } from './util'; +import { RoleManager } from './rbac'; /** * Enforcer = ManagementEnforcer + RBAC API. @@ -60,6 +61,8 @@ export class Enforcer extends ManagementEnforcer { this.model = m; this.model.printModel(); + this.rmMap = new Map([['g', this.newRoleManager()]]); + if (!lazyLoad && this.adapter) { await this.loadPolicy(); } diff --git a/src/internalEnforcer.ts b/src/internalEnforcer.ts index b171a072..92a23ac1 100644 --- a/src/internalEnforcer.ts +++ b/src/internalEnforcer.ts @@ -80,7 +80,7 @@ export class InternalEnforcer extends CoreEnforcer { this.watcher.update(); } - const [ok, effects] = await this.model.addPolicies(sec, ptype, rules); + const [ok, effects] = this.model.addPolicies(sec, ptype, rules); if (sec === 'g' && ok && effects?.length) { await this.buildIncrementalRoleLinks(PolicyOp.PolicyAdd, ptype, effects); } @@ -147,7 +147,7 @@ export class InternalEnforcer extends CoreEnforcer { this.watcher.update(); } - const ok = await this.model.removePolicy(sec, ptype, rule); + const ok = this.model.removePolicy(sec, ptype, rule); if (sec === 'g' && ok) { await this.buildIncrementalRoleLinks(PolicyOp.PolicyRemove, ptype, [rule]); } diff --git a/src/model/assertion.ts b/src/model/assertion.ts index 093455fd..016b63d5 100644 --- a/src/model/assertion.ts +++ b/src/model/assertion.ts @@ -15,6 +15,7 @@ import * as rbac from '../rbac'; import { logPrint } from '../log'; import { PolicyOp } from './model'; +import { RoleManager } from '../rbac'; // Assertion represents an expression in a section of the model. // For example: r = sub, obj, act @@ -23,17 +24,17 @@ export class Assertion { public value: string; public tokens: string[]; public policy: string[][]; - public rm: rbac.RoleManager; + public rm: RoleManager; /** * constructor is the constructor for Assertion. */ - constructor() { + constructor(synced = false) { this.key = ''; this.value = ''; this.tokens = []; this.policy = []; - this.rm = new rbac.DefaultRoleManager(10); + this.rm = synced ? new rbac.DefaultSyncedRoleManager(10) : new rbac.DefaultRoleManager(10); } public async buildIncrementalRoleLinks(rm: rbac.RoleManager, op: PolicyOp, rules: string[][]): Promise { diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index d32b4f80..e2ec205c 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -18,7 +18,7 @@ export type MatchingFunction = (...arg: any[]) => boolean | number | Promise; + private readonly functions: Map; /** * constructor is the constructor for FunctionMap. diff --git a/src/model/model.ts b/src/model/model.ts index b3d87640..981bb871 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -17,7 +17,7 @@ import * as util from '../util'; import { Config, ConfigInterface } from '../config'; import { Assertion } from './assertion'; import { getLogger, logPrint } from '../log'; -import { DefaultRoleManager } from '../rbac'; +import { RoleManager } from '../rbac'; export const sectionNameMap: { [index: string]: string } = { r: 'request_definition', @@ -38,6 +38,7 @@ export class Model { // Model represents the whole access control model. // Mest-map is the collection of assertions, can be "r", "p", "g", "e", "m". public model: Map>; + public synced = false; /** * constructor is the constructor for Model. @@ -77,7 +78,7 @@ export class Model { return false; } - const ast = new Assertion(); + const ast = new Assertion(this.synced); ast.key = key; ast.value = value; @@ -173,17 +174,16 @@ export class Model { } // buildRoleLinks initializes the roles in RBAC. - public async buildRoleLinks(rmMap: Map): Promise { + public async buildRoleLinks(rmMap: Map): Promise { const astMap = this.model.get('g'); if (!astMap) { return; } for (const key of astMap.keys()) { const ast = astMap.get(key); - let rm = rmMap.get(key); + const rm = rmMap.get(key); if (!rm) { - rm = new DefaultRoleManager(10); - rmMap.set(key, rm); + throw new Error("Role manager didn't exist."); } await ast?.buildRoleLinks(rm); } diff --git a/src/rbac/defaultRoleManager.ts b/src/rbac/defaultRoleManager.ts index 5bef7602..ef94dd1e 100644 --- a/src/rbac/defaultRoleManager.ts +++ b/src/rbac/defaultRoleManager.ts @@ -1,346 +1,46 @@ -// Copyright 2018 The Casbin Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +// noinspection JSVoidFunctionReturnValueUsed +import { internalRoleManager, MatchingFunc } from './internalRoleManager'; import { RoleManager } from './roleManager'; -import { getLogger, logPrint } from '../log'; - -export type MatchingFunc = (arg1: string, arg2: string) => boolean; - -// DEFAULT_DOMAIN defines the default domain space. -const DEFAULT_DOMAIN = 'casbin::default'; - -// loadOrDefault returns the existing value for the key if present. -// Otherwise, it stores and returns the given value. -function loadOrDefault(map: Map, key: K, value: V): V { - const read = map.get(key); - if (read === undefined) { - map.set(key, value); - return value; - } - return read; -} - -/** - * Role represents the data structure for a role in RBAC. - */ -class Role { - public name: string; - private roles: Role[]; - - constructor(name: string) { - this.name = name; - this.roles = []; - } - - public addRole(role: Role): void { - if (this.roles.some((n) => n.name === role.name)) { - return; - } - this.roles.push(role); - } - - public deleteRole(role: Role): void { - this.roles = this.roles.filter((n) => n.name !== role.name); - } - - public hasRole(name: string, hierarchyLevel: number): boolean { - if (this.name === name) { - return true; - } - if (hierarchyLevel <= 0) { - return false; - } - for (const role of this.roles) { - if (role.hasRole(name, hierarchyLevel - 1)) { - return true; - } - } +export class DefaultRoleManager extends internalRoleManager implements RoleManager { + public synced(): boolean { return false; } - public hasDirectRole(name: string): boolean { - return this.roles.some((n) => n.name === name); + public addDomainMatchingFunc(fn: MatchingFunc): Promise { + return Promise.resolve(this.addDomainMatchingFuncInternal(fn)); } - public toString(): string { - return this.name + this.roles.join(', '); + public addMatchingFunc(fn: MatchingFunc): Promise { + return Promise.resolve(this.addMatchingFuncInternal(fn)); } - public getRoles(): string[] { - return this.roles.map((n) => n.name); + public addLink(name1: string, name2: string, ...domain: string[]): Promise { + return Promise.resolve(this.addLinkInternal(name1, name2, ...domain)); } -} -class Roles extends Map { - constructor() { - super(); + public deleteLink(name1: string, name2: string, ...domain: string[]): Promise { + return Promise.resolve(this.deleteLinkInternal(name1, name2, ...domain)); } - public hasRole(name: string, matchingFunc?: MatchingFunc): boolean { - let ok = false; - if (matchingFunc) { - this.forEach((value, key) => { - if (matchingFunc(name, key)) { - ok = true; - } - }); - } else { - return this.has(name); - } - return ok; + public getRoles(name: string, ...domain: string[]): Promise { + return Promise.resolve(this.getRolesInternal(name, ...domain)); } - public createRole(name: string, matchingFunc?: MatchingFunc): Role { - const role = loadOrDefault(this, name, new Role(name)); - if (matchingFunc) { - this.forEach((value, key) => { - if (matchingFunc(name, key) && name !== key) { - // Add new role to matching role - const role1 = loadOrDefault(this, key, new Role(key)); - role.addRole(role1); - } - }); - } - return role; + public hasLink(name1: string, name2: string, ...domain: string[]): Promise { + return Promise.resolve(this.hasLinkInternal(name1, name2, ...domain)); } -} - -// RoleManager provides a default implementation for the RoleManager interface -export class DefaultRoleManager implements RoleManager { - private allDomains: Map; - private maxHierarchyLevel: number; - private hasPattern = false; - private hasDomainPattern = false; - private matchingFunc: MatchingFunc; - private domainMatchingFunc: MatchingFunc; - - /** - * DefaultRoleManager is the constructor for creating an instance of the - * default RoleManager implementation. - * - * @param maxHierarchyLevel the maximized allowed RBAC hierarchy level. - */ - constructor(maxHierarchyLevel: number) { - this.allDomains = new Map(); - this.allDomains.set(DEFAULT_DOMAIN, new Roles()); - this.maxHierarchyLevel = maxHierarchyLevel; - } - - /** - * addMatchingFunc support use pattern in g - * @param name name - * @param fn matching function - * @deprecated - */ - public async addMatchingFunc(name: string, fn: MatchingFunc): Promise; - - /** - * addMatchingFunc support use pattern in g - * @param fn matching function - */ - public async addMatchingFunc(fn: MatchingFunc): Promise; - - /** - * addMatchingFunc support use pattern in g - * @param name name - * @param fn matching function - * @deprecated - */ - public async addMatchingFunc(name: string | MatchingFunc, fn?: MatchingFunc): Promise { - this.hasPattern = true; - if (typeof name === 'string' && fn) { - this.matchingFunc = fn; - } else if (typeof name === 'function') { - this.matchingFunc = name; - } else { - throw new Error('error: domain should be 1 parameter'); - } - } - - /** - * addDomainMatchingFunc support use domain pattern in g - * @param fn domain matching function - * ``` - */ - public async addDomainMatchingFunc(fn: MatchingFunc): Promise { - this.hasDomainPattern = true; - this.domainMatchingFunc = fn; - } - - private generateTempRoles(domain: string): Roles { - loadOrDefault(this.allDomains, domain, new Roles()); - - const patternDomain = new Set([domain]); - if (this.hasDomainPattern) { - this.allDomains.forEach((value, key) => { - if (this.domainMatchingFunc(domain, key)) { - patternDomain.add(key); - } - }); - } - const allRoles = new Roles(); - patternDomain.forEach((domain) => { - loadOrDefault(this.allDomains, domain, new Roles()).forEach((value, key) => { - const role1 = allRoles.createRole(value.name, this.matchingFunc); - value.getRoles().forEach((n) => { - role1.addRole(allRoles.createRole(n, this.matchingFunc)); - }); - }); - }); - return allRoles; + public clear(): Promise { + return Promise.resolve(this.clearInternal()); } - /** - * addLink adds the inheritance link between role: name1 and role: name2. - * aka role: name1 inherits role: name2. - * domain is a prefix to the roles. - */ - public async addLink(name1: string, name2: string, ...domain: string[]): Promise { - if (domain.length === 0) { - domain = [DEFAULT_DOMAIN]; - } else if (domain.length > 1) { - throw new Error('error: domain should be 1 parameter'); - } - - const allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); - - const role1 = loadOrDefault(allRoles, name1, new Role(name1)); - const role2 = loadOrDefault(allRoles, name2, new Role(name2)); - role1.addRole(role2); - } - - /** - * clear clears all stored data and resets the role manager to the initial state. - */ - public async clear(): Promise { - this.allDomains = new Map(); - this.allDomains.set(DEFAULT_DOMAIN, new Roles()); - } - - /** - * deleteLink deletes the inheritance link between role: name1 and role: name2. - * aka role: name1 does not inherit role: name2 any more. - * domain is a prefix to the roles. - */ - public async deleteLink(name1: string, name2: string, ...domain: string[]): Promise { - if (domain.length === 0) { - domain = [DEFAULT_DOMAIN]; - } else if (domain.length > 1) { - throw new Error('error: domain should be 1 parameter'); - } - - const allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); - - if (!allRoles.has(name1) || !allRoles.has(name2)) { - return; - } - - const role1 = loadOrDefault(allRoles, name1, new Role(name1)); - const role2 = loadOrDefault(allRoles, name2, new Role(name2)); - role1.deleteRole(role2); - } - - /** - * hasLink determines whether role: name1 inherits role: name2. - * domain is a prefix to the roles. - */ - public async hasLink(name1: string, name2: string, ...domain: string[]): Promise { - if (domain.length === 0) { - domain = [DEFAULT_DOMAIN]; - } else if (domain.length > 1) { - throw new Error('error: domain should be 1 parameter'); - } - - if (name1 === name2) { - return true; - } - - let allRoles: Roles; - if (this.hasPattern || this.hasDomainPattern) { - allRoles = this.generateTempRoles(domain[0]); - } else { - allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); - } - - if (!allRoles.hasRole(name1, this.matchingFunc) || !allRoles.hasRole(name2, this.matchingFunc)) { - return false; - } - - const role1 = allRoles.createRole(name1, this.matchingFunc); - return role1.hasRole(name2, this.maxHierarchyLevel); - } - - /** - * getRoles gets the roles that a subject inherits. - * domain is a prefix to the roles. - */ - public async getRoles(name: string, ...domain: string[]): Promise { - if (domain.length === 0) { - domain = [DEFAULT_DOMAIN]; - } else if (domain.length > 1) { - throw new Error('error: domain should be 1 parameter'); - } - - let allRoles: Roles; - if (this.hasPattern || this.hasDomainPattern) { - allRoles = this.generateTempRoles(domain[0]); - } else { - allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); - } - - if (!allRoles.hasRole(name, this.matchingFunc)) { - return []; - } - - return allRoles.createRole(name, this.matchingFunc).getRoles(); - } - - /** - * getUsers gets the users that inherits a subject. - * domain is an unreferenced parameter here, may be used in other implementations. - */ - public async getUsers(name: string, ...domain: string[]): Promise { - if (domain.length === 0) { - domain = [DEFAULT_DOMAIN]; - } else if (domain.length > 1) { - throw new Error('error: domain should be 1 parameter'); - } - - let allRoles: Roles; - if (this.hasPattern || this.hasDomainPattern) { - allRoles = this.generateTempRoles(domain[0]); - } else { - allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); - } - - if (!allRoles.hasRole(name, this.matchingFunc)) { - return []; - } - - return [...allRoles.values()].filter((n) => n.hasDirectRole(name)).map((n) => n.name); + public getUsers(name: string, ...domain: string[]): Promise { + return Promise.resolve(this.getUsersInternal(name, ...domain)); } - /** - * printRoles prints all the roles to log. - */ - public async printRoles(): Promise { - if (getLogger().isEnable()) { - [...this.allDomains.values()].forEach((n) => { - logPrint(n.toString()); - }); - } + public printRoles(): Promise { + return Promise.resolve(this.printRolesInternal()); } } diff --git a/src/rbac/defaultSyncedRoleManager.ts b/src/rbac/defaultSyncedRoleManager.ts new file mode 100644 index 00000000..35a34b97 --- /dev/null +++ b/src/rbac/defaultSyncedRoleManager.ts @@ -0,0 +1,44 @@ +import { internalRoleManager, MatchingFunc } from './internalRoleManager'; +import { RoleManager } from './roleManager'; + +export class DefaultSyncedRoleManager extends internalRoleManager implements RoleManager { + public synced(): boolean { + return true; + } + + public addDomainMatchingFunc(fn: MatchingFunc): void { + return this.addDomainMatchingFuncInternal(fn); + } + + public addMatchingFunc(fn: MatchingFunc): void { + return this.addMatchingFuncInternal(fn); + } + + public addLink(name1: string, name2: string, ...domain: string[]): void { + return this.addLinkInternal(name1, name2, ...domain); + } + + public clear(): void { + return this.clearInternal(); + } + + public deleteLink(name1: string, name2: string, ...domain: string[]): void { + return this.deleteLinkInternal(name1, name2, ...domain); + } + + public getRoles(name: string, ...domain: string[]): string[] { + return this.getRolesInternal(name, ...domain); + } + + public getUsers(name: string, ...domain: string[]): string[] { + return this.getUsersInternal(name, ...domain); + } + + public hasLink(name1: string, name2: string, ...domain: string[]): boolean { + return this.hasLinkInternal(name1, name2, ...domain); + } + + public printRoles(): void { + return this.printRolesInternal(); + } +} diff --git a/src/rbac/index.ts b/src/rbac/index.ts index a2e1042c..73f21b39 100644 --- a/src/rbac/index.ts +++ b/src/rbac/index.ts @@ -12,5 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +export * from './internalRoleManager'; export * from './defaultRoleManager'; +export * from './defaultSyncedRoleManager'; export * from './roleManager'; diff --git a/src/rbac/internalRoleManager.ts b/src/rbac/internalRoleManager.ts new file mode 100644 index 00000000..fdffbb85 --- /dev/null +++ b/src/rbac/internalRoleManager.ts @@ -0,0 +1,345 @@ +// Copyright 2018 The Casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { getLogger, logPrint } from '../log'; + +export type MatchingFunc = (arg1: string, arg2: string) => boolean; + +// DEFAULT_DOMAIN defines the default domain space. +const DEFAULT_DOMAIN = 'casbin::default'; + +// loadOrDefault returns the existing value for the key if present. +// Otherwise, it stores and returns the given value. +function loadOrDefault(map: Map, key: K, value: V): V { + const read = map.get(key); + if (read === undefined) { + map.set(key, value); + return value; + } + return read; +} + +/** + * Role represents the data structure for a role in RBAC. + */ +class Role { + public name: string; + private roles: Role[]; + + constructor(name: string) { + this.name = name; + this.roles = []; + } + + public addRole(role: Role): void { + if (this.roles.some((n) => n.name === role.name)) { + return; + } + this.roles.push(role); + } + + public deleteRole(role: Role): void { + this.roles = this.roles.filter((n) => n.name !== role.name); + } + + public hasRole(name: string, hierarchyLevel: number): boolean { + if (this.name === name) { + return true; + } + if (hierarchyLevel <= 0) { + return false; + } + for (const role of this.roles) { + if (role.hasRole(name, hierarchyLevel - 1)) { + return true; + } + } + + return false; + } + + public hasDirectRole(name: string): boolean { + return this.roles.some((n) => n.name === name); + } + + public toString(): string { + return this.name + this.roles.join(', '); + } + + public getRoles(): string[] { + return this.roles.map((n) => n.name); + } +} + +class Roles extends Map { + constructor() { + super(); + } + + public hasRole(name: string, matchingFunc?: MatchingFunc): boolean { + let ok = false; + if (matchingFunc) { + this.forEach((value, key) => { + if (matchingFunc(name, key)) { + ok = true; + } + }); + } else { + return this.has(name); + } + return ok; + } + + public createRole(name: string, matchingFunc?: MatchingFunc): Role { + const role = loadOrDefault(this, name, new Role(name)); + if (matchingFunc) { + this.forEach((value, key) => { + if (matchingFunc(name, key) && name !== key) { + // Add new role to matching role + const role1 = loadOrDefault(this, key, new Role(key)); + role.addRole(role1); + } + }); + } + return role; + } +} + +// RoleManager provides a default implementation for the RoleManager interface +export class internalRoleManager { + private allDomains: Map; + private readonly maxHierarchyLevel: number; + private hasPattern = false; + private hasDomainPattern = false; + private matchingFunc: MatchingFunc; + private domainMatchingFunc: MatchingFunc; + + /** + * InternalRoleManager is the constructor for creating an instance of the + * default RoleManager internal implementation. + * + * @param maxHierarchyLevel the maximized allowed RBAC hierarchy level. + */ + constructor(maxHierarchyLevel: number) { + this.allDomains = new Map(); + this.allDomains.set(DEFAULT_DOMAIN, new Roles()); + this.maxHierarchyLevel = maxHierarchyLevel; + } + + /** + * addMatchingFuncInternal support use pattern in g + * @param name name + * @param fn matching function + * @deprecated + */ + public addMatchingFuncInternal(name: string, fn: MatchingFunc): void; + + /** + * addMatchingFunc support use pattern in g + * @param fn matching function + */ + public addMatchingFuncInternal(fn: MatchingFunc): void; + + /** + * addMatchingFuncInternal support use pattern in g + * @param name name + * @param fn matching function + * @deprecated + */ + public addMatchingFuncInternal(name: string | MatchingFunc, fn?: MatchingFunc): void { + this.hasPattern = true; + if (typeof name === 'string' && fn) { + this.matchingFunc = fn; + } else if (typeof name === 'function') { + this.matchingFunc = name; + } else { + throw new Error('error: domain should be 1 parameter'); + } + } + + /** + * addDomainMatchingFuncInternal support use domain pattern in g + * @param fn domain matching function + * ``` + */ + public addDomainMatchingFuncInternal(fn: MatchingFunc): void { + this.hasDomainPattern = true; + this.domainMatchingFunc = fn; + } + + private generateTempRolesInternal(domain: string): Roles { + loadOrDefault(this.allDomains, domain, new Roles()); + + const patternDomain = new Set([domain]); + if (this.hasDomainPattern) { + this.allDomains.forEach((value, key) => { + if (this.domainMatchingFunc(domain, key)) { + patternDomain.add(key); + } + }); + } + + const allRoles = new Roles(); + patternDomain.forEach((domain) => { + loadOrDefault(this.allDomains, domain, new Roles()).forEach((value, key) => { + const role1 = allRoles.createRole(value.name, this.matchingFunc); + value.getRoles().forEach((n) => { + role1.addRole(allRoles.createRole(n, this.matchingFunc)); + }); + }); + }); + return allRoles; + } + + /** + * addLinkInternal adds the inheritance link between role: name1 and role: name2. + * aka role: name1 inherits role: name2. + * domain is a prefix to the roles. + */ + public addLinkInternal(name1: string, name2: string, ...domain: string[]): void { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + const allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); + + const role1 = loadOrDefault(allRoles, name1, new Role(name1)); + const role2 = loadOrDefault(allRoles, name2, new Role(name2)); + role1.addRole(role2); + } + + /** + * clearInternal clears all stored data and resets the role manager to the initial state. + */ + public clearInternal(): void { + this.allDomains = new Map(); + this.allDomains.set(DEFAULT_DOMAIN, new Roles()); + } + + /** + * deleteLinkInternal deletes the inheritance link between role: name1 and role: name2. + * aka role: name1 does not inherit role: name2 any more. + * domain is a prefix to the roles. + */ + public deleteLinkInternal(name1: string, name2: string, ...domain: string[]): void { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + const allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); + + if (!allRoles.has(name1) || !allRoles.has(name2)) { + return; + } + + const role1 = loadOrDefault(allRoles, name1, new Role(name1)); + const role2 = loadOrDefault(allRoles, name2, new Role(name2)); + role1.deleteRole(role2); + } + + /** + * hasLinkInternal determines whether role: name1 inherits role: name2. + * domain is a prefix to the roles. + */ + public hasLinkInternal(name1: string, name2: string, ...domain: string[]): boolean { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + if (name1 === name2) { + return true; + } + + let allRoles: Roles; + if (this.hasPattern || this.hasDomainPattern) { + allRoles = this.generateTempRolesInternal(domain[0]); + } else { + allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); + } + + if (!allRoles.hasRole(name1, this.matchingFunc) || !allRoles.hasRole(name2, this.matchingFunc)) { + return false; + } + + const role1 = allRoles.createRole(name1, this.matchingFunc); + return role1.hasRole(name2, this.maxHierarchyLevel); + } + + /** + * getRoles gets the roles that a subject inherits. + * domain is a prefix to the roles. + */ + public getRolesInternal(name: string, ...domain: string[]): string[] { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + let allRoles: Roles; + if (this.hasPattern || this.hasDomainPattern) { + allRoles = this.generateTempRolesInternal(domain[0]); + } else { + allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); + } + + if (!allRoles.hasRole(name, this.matchingFunc)) { + return []; + } + + return allRoles.createRole(name, this.matchingFunc).getRoles(); + } + + /** + * getUsersInternal gets the users that inherits a subject. + * domain is an unreferenced parameter here, may be used in other implementations. + */ + public getUsersInternal(name: string, ...domain: string[]): string[] { + if (domain.length === 0) { + domain = [DEFAULT_DOMAIN]; + } else if (domain.length > 1) { + throw new Error('error: domain should be 1 parameter'); + } + + let allRoles: Roles; + if (this.hasPattern || this.hasDomainPattern) { + allRoles = this.generateTempRolesInternal(domain[0]); + } else { + allRoles = loadOrDefault(this.allDomains, domain[0], new Roles()); + } + + if (!allRoles.hasRole(name, this.matchingFunc)) { + return []; + } + + return [...allRoles.values()].filter((n) => n.hasDirectRole(name)).map((n) => n.name); + } + + /** + * printRolesInternal prints all the roles to log. + */ + public printRolesInternal(): void { + if (getLogger().isEnable()) { + [...this.allDomains.values()].forEach((n) => { + logPrint(n.toString()); + }); + } + } +} diff --git a/src/rbac/roleManager.ts b/src/rbac/roleManager.ts index 8deaa289..f35e00eb 100644 --- a/src/rbac/roleManager.ts +++ b/src/rbac/roleManager.ts @@ -13,24 +13,29 @@ // limitations under the License. // RoleManager provides interface to define the operations for managing roles. +import { MatchingFunc } from './internalRoleManager'; + export interface RoleManager { + addDomainMatchingFunc?(fn: MatchingFunc): Promise | void; + addMatchingFunc?(fn: MatchingFunc): Promise | void; + synced?(): boolean; // Clear clears all stored data and resets the role manager to the initial state. - clear(): Promise; + clear(): Promise | void; // AddLink adds the inheritance link between two roles. role: name1 and role: name2. // domain is a prefix to the roles (can be used for other purposes). - addLink(name1: string, name2: string, ...domain: string[]): Promise; + addLink(name1: string, name2: string, ...domain: string[]): Promise | void; // DeleteLink deletes the inheritance link between two roles. role: name1 and role: name2. // domain is a prefix to the roles (can be used for other purposes). - deleteLink(name1: string, name2: string, ...domain: string[]): Promise; + deleteLink(name1: string, name2: string, ...domain: string[]): Promise | void; // HasLink determines whether a link exists between two roles. role: name1 inherits role: name2. // domain is a prefix to the roles (can be used for other purposes). - hasLink(name1: string, name2: string, ...domain: string[]): Promise; + hasLink(name1: string, name2: string, ...domain: string[]): Promise | boolean; // GetRoles gets the roles that a user inherits. // domain is a prefix to the roles (can be used for other purposes). - getRoles(name: string, ...domain: string[]): Promise; + getRoles(name: string, ...domain: string[]): Promise | string[]; // GetUsers gets the users that inherits a role. // domain is a prefix to the users (can be used for other purposes). - getUsers(name: string, ...domain: string[]): Promise; + getUsers(name: string, ...domain: string[]): Promise | string[]; // PrintRoles prints all the roles to log. - printRoles(): Promise; + printRoles(): Promise | void; } diff --git a/src/syncedEnforcer.ts b/src/syncedEnforcer.ts index 45ad846a..7ae1fa61 100644 --- a/src/syncedEnforcer.ts +++ b/src/syncedEnforcer.ts @@ -15,11 +15,12 @@ import { Enforcer, newEnforcerWithClass } from './enforcer'; import AwaitLock from 'await-lock'; import { Watcher } from './persist'; -import { MatchingFunc } from './rbac'; +import { DefaultSyncedRoleManager, MatchingFunc, RoleManager } from './rbac'; +import { newModel } from './model'; // SyncedEnforcer wraps Enforcer and provides synchronized access export class SyncedEnforcer extends Enforcer { - private lock = new AwaitLock(); + lock = new AwaitLock(); /** * setWatcher sets the current watcher. @@ -500,6 +501,17 @@ export class SyncedEnforcer extends Enforcer { this.lock.release(); }); } + + public newRoleManager(): RoleManager { + return new DefaultSyncedRoleManager(10); + } + + public loadModel(): void { + this.model = newModel(); + this.model.synced = true; + this.model.loadModel(this.modelPath); + this.model.printModel(); + } } // newSyncedEnforcer creates a synchronized enforcer via file or DB. diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 56a9f1cb..3cc5671c 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -244,8 +244,11 @@ function globMatch(string: string, pattern: string): boolean { } } +export type gFunction = (...args: string[]) => Promise; +export type syncGFuntion = (...args: string[]) => boolean; + // generateGFunction is the factory method of the g(_, _) function. -function generateGFunction(rm: rbac.RoleManager): any { +function generateGFunction(rm: rbac.RoleManager): gFunction { const memorized = new Map(); return async function func(...args: any[]): Promise { const key = args.toString(); @@ -272,4 +275,42 @@ function generateGFunction(rm: rbac.RoleManager): any { }; } -export { keyMatchFunc, keyMatch2Func, keyMatch3Func, regexMatchFunc, ipMatchFunc, generateGFunction, keyMatch4Func, globMatch }; +// generateGFunction is the factory method of the sync g(_, _) function. +function generateSyncGFunction(rm: rbac.RoleManager): syncGFuntion { + const memorized = new Map(); + return function func(...args: any[]): boolean { + const key = args.toString(); + let value = memorized.get(key); + if (value) { + return value; + } + + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); + + if (!rm) { + value = name1 === name2; + } else if (args.length === 2) { + value = rm.hasLink(name1, name2) as boolean; + } else { + const domain: string = args[2].toString(); + value = rm.hasLink(name1, name2, domain) as boolean; + } + + memorized.set(key, value); + return value; + }; +} + +export { + keyMatchFunc, + keyMatch2Func, + keyMatch3Func, + regexMatchFunc, + ipMatchFunc, + generateGFunction, + generateSyncGFunction, + keyMatch4Func, + globMatch, +}; diff --git a/src/util/ip.ts b/src/util/ip.ts index 3f0975ca..cfeafa83 100644 --- a/src/util/ip.ts +++ b/src/util/ip.ts @@ -273,9 +273,6 @@ export const ip = { }); return ipl >>> 0; }, - fromLong: function (ipl: number): string { - return (ipl >>> 24) + '.' + ((ipl >> 16) & 255) + '.' + ((ipl >> 8) & 255) + '.' + (ipl & 255); - }, }; function _normalizeFamily(family: string): string { diff --git a/src/util/util.ts b/src/util/util.ts index 18492865..744b8c7c 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -16,6 +16,7 @@ // because the expression evaluation doesn't support such variable names. import parse from 'csv-parse/lib/sync'; +import { RoleManager } from '../rbac'; function escapeAssertion(s: string): string { s = s.replace(/r\./g, 'r_'); @@ -163,6 +164,15 @@ function policyStringToArray(policy: string): string[][] { }); } +function isRoleManagerSync(rm: RoleManager): boolean { + const synced = rm.synced; + if (synced) { + return synced(); + } else { + return false; + } +} + export { escapeAssertion, removeComments, @@ -180,4 +190,5 @@ export { deepCopy, policyArrayToString, policyStringToArray, + isRoleManagerSync, }; diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index f070c183..5d4008df 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -587,8 +587,8 @@ test('TestEnforceEx', async () => { await e.addPermissionForUser('alice', 'data1', 'invalid'); - testEnforceEx(e, 'alice', 'data1', 'read', [false, []]); - testEnforceEx(e, 'alice', 'data1', 'invalid', [true, ['alice', 'data1', 'invalid']]); + await testEnforceEx(e, 'alice', 'data1', 'read', [false, []]); + await testEnforceEx(e, 'alice', 'data1', 'invalid', [true, ['alice', 'data1', 'invalid']]); }); test('TestSyncEnforceEx', async () => { diff --git a/test/model.test.ts b/test/model.test.ts index 18806a3c..5fc542d5 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -242,7 +242,7 @@ function customFunctionWrapper(...args: any[]): boolean { test('TestKeyMatchCustomModel', async () => { const e = await getEnforcerWithPath('examples/keymatch_custom_model.conf', 'examples/keymatch2_policy.csv'); - e.addFunction('keyMatchCustom', customFunctionWrapper); + await e.addFunction('keyMatchCustom', customFunctionWrapper); await testEnforce(e, 'alice', '/alice_data2/myid', 'GET', false); await testEnforce(e, 'alice', '/alice_data2/myid/using/res_id', 'GET', true); diff --git a/test/rbac/defaultRoleManager.test.ts b/test/rbac/defaultRoleManager.test.ts index c0059bb1..f35b6699 100644 --- a/test/rbac/defaultRoleManager.test.ts +++ b/test/rbac/defaultRoleManager.test.ts @@ -1,4 +1,4 @@ -import { DefaultRoleManager } from '../../src/rbac'; +import { DefaultRoleManager } from '../../src'; import { keyMatch2Func } from '../../src/util'; test('TestAllMatchingFunc', async () => { diff --git a/test/syncedEnforcer.test.ts b/test/syncedEnforcer.test.ts new file mode 100644 index 00000000..dcde04df --- /dev/null +++ b/test/syncedEnforcer.test.ts @@ -0,0 +1,89 @@ +import { Enforcer, newModel, newSyncedEnforcer, SyncedEnforcer } from '../src'; + +function testEnforce(e: Enforcer, sub: any, obj: string, act: string, res: boolean): void { + expect(e.enforceSync(sub, obj, act)).toBe(res); +} + +async function waitLock(e: SyncedEnforcer): Promise { + await e.lock.acquireAsync(); + e.lock.release(); +} + +test('TestRBACModelInMemoryWithEnforceSync', async () => { + const m = newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act'); + + const e = await newSyncedEnforcer(m); + + await e.addPermissionForUser('alice', 'data1', 'read'); + await e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('data2_admin', 'data2', 'read'); + await e.addPermissionForUser('data2_admin', 'data2', 'write'); + await e.addRoleForUser('alice', 'data2_admin'); + await waitLock(e); + + testEnforce(e, 'alice', 'data1', 'read', true); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); + + await e.deletePermissionForUser('alice', 'data1', 'read'); + await e.deletePermissionForUser('bob', 'data2', 'write'); + await e.deletePermissionForUser('data2_admin', 'data2', 'read'); + await e.deletePermissionForUser('data2_admin', 'data2', 'write'); + await waitLock(e); + + testEnforce(e, 'alice', 'data1', 'read', false); + testEnforce(e, 'alice', 'data1', 'write', false); + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data1', 'read', false); + testEnforce(e, 'bob', 'data1', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', false); + + await e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('data2_admin', 'data2', 'read'); + await e.addPermissionForUser('data2_admin', 'data2', 'write'); + await e.addRoleForUser('alice', 'data2_admin'); + await waitLock(e); + + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); + + await e.deletePermission('data2', 'write'); + await waitLock(e); + + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', false); + + await e.addPermissionForUser('bob', 'data2', 'write'); + await e.addPermissionForUser('data2_admin', 'data2', 'read'); + await e.addPermissionForUser('data2_admin', 'data2', 'write'); + await waitLock(e); + + testEnforce(e, 'alice', 'data2', 'read', true); + testEnforce(e, 'alice', 'data2', 'write', true); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); + + await e.deletePermissionsForUser('data2_admin'); + await waitLock(e); + + testEnforce(e, 'alice', 'data2', 'read', false); + testEnforce(e, 'alice', 'data2', 'write', false); + testEnforce(e, 'bob', 'data2', 'read', false); + testEnforce(e, 'bob', 'data2', 'write', true); +}); From ca4b57268f0cfe362a46237d583fd907578423d0 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Tue, 17 Aug 2021 18:06:07 +0800 Subject: [PATCH 473/497] feat: sync with upstream ref to: https://github.com/casbin/node-casbin/compare/v5.10.0...v5.11.4 Signed-off-by: Zxilly --- examples/in_operator_model.conf | 2 +- src/coreEnforcer.ts | 11 +++---- src/model/functionMap.ts | 4 ++- src/util/builtinOperators.ts | 57 +++++++++++++++++++++++++++++++++ src/util/util.ts | 34 ++++++++++++++++++-- test/enforcer.test.ts | 19 +++++++++++ test/model.test.ts | 12 +++---- test/util.test.ts | 21 ++++++++++-- 8 files changed, 142 insertions(+), 18 deletions(-) diff --git a/examples/in_operator_model.conf b/examples/in_operator_model.conf index 452325cc..c83ac9b3 100644 --- a/examples/in_operator_model.conf +++ b/examples/in_operator_model.conf @@ -8,4 +8,4 @@ p = sub, obj, act e = some(where (p.eft == allow)) [matchers] -m = r.sub.Owner == r.obj.Owner && r.sub.Doc in(r.obj.Docs) +m = r.sub.Owner == r.obj.Owner && r.sub.Doc in (r.obj.Docs) diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 2f2638b6..e4543a9d 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -28,6 +28,8 @@ import { generatorRunAsync, generateSyncGFunction, isRoleManagerSync, + customIn, + bracketCompatible, } from './util'; import { getLogger, logPrint } from './log'; import { MatchingFunc } from './rbac'; @@ -58,14 +60,11 @@ export class CoreEnforcer { private getExpression(asyncCompile: boolean, exp: string): Matcher { const matcherKey = `${asyncCompile ? 'ASYNC[' : 'SYNC['}${exp}]`; - addBinaryOp('in', 1, (a, b) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return (a in b) as number; - }); + addBinaryOp('in', 1, customIn); let expression = this.matcherMap.get(matcherKey); if (!expression) { + exp = bracketCompatible(exp); expression = asyncCompile ? compileAsync(exp) : compile(exp); this.matcherMap.set(matcherKey, expression); } @@ -455,7 +454,7 @@ export class CoreEnforcer { for (const ruleName of ruleNames) { if (ruleName in parameters) { const rule = escapeAssertion(parameters[ruleName]); - expWithRule = replaceEval(expWithRule, rule); + expWithRule = replaceEval(expWithRule, ruleName, rule); } else { throw new Error(`${ruleName} not in ${parameters}`); } diff --git a/src/model/functionMap.ts b/src/model/functionMap.ts index e2ec205c..0222d82a 100644 --- a/src/model/functionMap.ts +++ b/src/model/functionMap.ts @@ -14,7 +14,7 @@ import * as util from '../util'; -export type MatchingFunction = (...arg: any[]) => boolean | number | Promise | Promise; +export type MatchingFunction = (...arg: any[]) => boolean | number | string | Promise | Promise | Promise; // FunctionMap represents the collection of Function. export class FunctionMap { @@ -32,7 +32,9 @@ export class FunctionMap { const fm = new FunctionMap(); fm.addFunction('keyMatch', util.keyMatchFunc); + fm.addFunction('keyGet', util.keyGetFunc); fm.addFunction('keyMatch2', util.keyMatch2Func); + fm.addFunction('keyGet2', util.keyGet2Func); fm.addFunction('keyMatch3', util.keyMatch3Func); fm.addFunction('keyMatch4', util.keyMatch4Func); fm.addFunction('regexMatch', util.regexMatchFunc); diff --git a/src/util/builtinOperators.ts b/src/util/builtinOperators.ts index 3cc5671c..00160be2 100644 --- a/src/util/builtinOperators.ts +++ b/src/util/builtinOperators.ts @@ -20,6 +20,61 @@ function regexMatch(key1: string, key2: string): boolean { return new RegExp(key2).test(key1); } +// KeyGet returns the matched part +// For example, "/foo/bar/foo" matches "/foo/*" +// "bar/foo" will been returned +function keyGet(key1: string, key2: string): string { + const pos: number = key2.indexOf('*'); + if (pos === -1) { + return ''; + } + if (key1.length > pos) { + if (key1.slice(0, pos) === key2.slice(0, pos)) { + return key1.slice(pos, key1.length); + } + } + return ''; +} + +// keyGetFunc is the wrapper for keyGet. +function keyGetFunc(...args: any[]): string { + const [arg0, arg1] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); + + return keyGet(name1, name2); +} + +// KeyGet2 returns value matched pattern +// For example, "/resource1" matches "/:resource" +// if the pathVar == "resource", then "resource1" will be returned +function keyGet2(key1: string, key2: string, pathVar: string): string { + if (keyMatch2(key1, key2)) { + const re = new RegExp('[^/]+', 'g'); + const keys = key2.match(re); + const values = key1.match(re); + if (!keys || !values) { + return ''; + } + const index = keys.indexOf(`:${pathVar}`); + if (index === -1) { + return ''; + } + return values[index]; + } else { + return ''; + } +} + +function keyGet2Func(...args: any[]): string { + const [arg0, arg1, arg2] = args; + const name1: string = (arg0 || '').toString(); + const name2: string = (arg1 || '').toString(); + const name3: string = (arg2 || '').toString(); + + return keyGet2(name1, name2, name3); +} + // keyMatch determines whether key1 matches the pattern of key2 (similar to RESTful path), // key2 can contain a *. // For example, '/foo/bar' matches '/foo/*' @@ -304,6 +359,8 @@ function generateSyncGFunction(rm: rbac.RoleManager): syncGFuntion { } export { + keyGetFunc, + keyGet2Func, keyMatchFunc, keyMatch2Func, keyMatch3Func, diff --git a/src/util/util.ts b/src/util/util.ts index 744b8c7c..33776eb0 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -90,8 +90,8 @@ function hasEval(s: string): boolean { } // replaceEval replace function eval with the value of its parameters -function replaceEval(s: string, rule: string): string { - return s.replace(evalReg, '(' + rule + ')'); +function replaceEval(s: string, ruleName: string, rule: string): string { + return s.replace(`eval(${ruleName})`, '(' + rule + ')'); } // getEvalValue returns the parameters of function eval @@ -173,6 +173,34 @@ function isRoleManagerSync(rm: RoleManager): boolean { } } +function customIn(a: number | string, b: number | string): number { + if ((b as any) instanceof Array) { + return (((b as any) as Array).includes(a) as unknown) as number; + } + return ((a in (b as any)) as unknown) as number; +} + +function bracketCompatible(exp: string): string { + // TODO: This function didn't support nested bracket. + if (!(exp.includes(' in ') && exp.includes(' ('))) { + return exp; + } + + const re = / \([^)]*\)/g; + const array = exp.split(''); + + let reResult: RegExpExecArray | null; + while ((reResult = re.exec(exp)) !== null) { + if (!(reResult[0] as string).includes(',')) { + continue; + } + array[reResult.index + 1] = '['; + array[re.lastIndex - 1] = ']'; + } + exp = array.join(''); + return exp; +} + export { escapeAssertion, removeComments, @@ -191,4 +219,6 @@ export { policyArrayToString, policyStringToArray, isRoleManagerSync, + customIn, + bracketCompatible, }; diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 5d4008df..1b736e7c 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -612,3 +612,22 @@ test('Test RBAC G2', async () => { expect(await e.enforce('alice', 'data1', 'read')).toBe(false); expect(await e.enforce('admin', 'data1', 'read')).toBe(true); }); + +test('test ABAC multiple eval()', async () => { + const m = newModel(); + m.addDef('r', 'r', 'sub, obj, act'); + m.addDef('p', 'p', 'sub_rule_1, sub_rule_2, act'); + m.addDef('e', 'e', 'some(where (p.eft == allow))'); + m.addDef('m', 'm', 'eval(p.sub_rule_1) && eval(p.sub_rule_2) && r.act == p.act'); + + const policy = new StringAdapter( + ` + p, r.sub > 50, r.obj > 50, read + ` + ); + + const e = await newEnforcer(m, policy); + await testEnforce(e, 56, (98 as unknown) as string, 'read', true); + await testEnforce(e, 23, (67 as unknown) as string, 'read', false); + await testEnforce(e, 78, (34 as unknown) as string, 'read', false); +}); diff --git a/test/model.test.ts b/test/model.test.ts index 5fc542d5..986b0a16 100644 --- a/test/model.test.ts +++ b/test/model.test.ts @@ -422,9 +422,9 @@ test('ABACModelWithInOperator', async () => { class TestRule1 { public Owner: string; - public Doc: number; + public Doc: string; - constructor(Owner: string, Doc: number) { + constructor(Owner: string, Doc: string) { this.Owner = Owner; this.Doc = Doc; } @@ -432,16 +432,16 @@ test('ABACModelWithInOperator', async () => { class TestRule2 { public Owner: string; - public Docs: Array; + public Docs: Array; - constructor(Owner: string, Doc: Array) { + constructor(Owner: string, Doc: Array) { this.Owner = Owner; this.Docs = Doc; } } - const rule1 = new TestRule1('alice', 1); - const rule2 = new TestRule2('alice', [1, 2]); + const rule1 = new TestRule1('alice', '1'); + const rule2 = new TestRule2('alice', ['1', '2']); await expect(e.enforce(rule1, rule2)).resolves.toBe(true); }); diff --git a/test/util.test.ts b/test/util.test.ts index fd2a33fd..137d4d6f 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -145,8 +145,12 @@ test('test hasEval', () => { }); test('test replaceEval', () => { - expect(util.replaceEval('eval() && a && b && c', 'a')).toEqual('(a) && a && b && c'); - expect(util.replaceEval('eval() && a && b && c', '(a)')).toEqual('((a)) && a && b && c'); + expect(util.replaceEval('eval() && a && b && c', '', 'a')).toEqual('(a) && a && b && c'); + expect(util.replaceEval('eval() && a && b && c', '', '(a)')).toEqual('((a)) && a && b && c'); + expect(util.replaceEval('eval(p_some_rule) && c', 'p_some_rule', '(a)')).toEqual('((a)) && c'); + expect(util.replaceEval('eval(p_some_rule) && eval(p_some_other_rule) && c', 'p_some_rule', '(a)')).toEqual( + '((a)) && eval(p_some_other_rule) && c' + ); }); test('test getEvalValue', () => { @@ -170,3 +174,16 @@ test('test policyArrayToString', () => { expect(util.policyArrayToString(['p', 'alice', 'data1', 'read'])).toEqual(`"p","alice","data1","read"`); expect(util.policyArrayToString(['p', 'alice ', ' data1', 'read'])).toEqual(`"p","alice "," data1","read"`); }); + +test('test keyGetFunc', () => { + expect(util.keyGetFunc('/foo/bar', '/foo/*')).toEqual('bar'); + expect(util.keyGetFunc('/bar/foo', '/foo/*')).toEqual(''); +}); + +test('test keyGet2Func', () => { + expect(util.keyGet2Func('/foo/bar', '/foo/*', 'bar')).toEqual(''); + expect(util.keyGet2Func('/foo/baz', '/foo/:bar', 'bar')).toEqual('baz'); + expect(util.keyGet2Func('/foo/baz/foo', '/foo/:bar/foo', 'bar')).toEqual('baz'); + expect(util.keyGet2Func('/baz', '/foo', 'bar')).toEqual(''); + expect(util.keyGet2Func('/foo/baz', '/foo', 'bar')).toEqual(''); +}); From f2ddaab9223cd83d21978c473525b469cd419a4b Mon Sep 17 00:00:00 2001 From: Zxilly Date: Wed, 18 Aug 2021 15:51:33 +0800 Subject: [PATCH 474/497] feat: implement csv parser This helps to reduce the volume Signed-off-by: Zxilly --- package.json | 1 - src/util/util.ts | 66 ++++++++++++++++++++++++++++++++++++++++++----- test/util.test.ts | 3 ++- 3 files changed, 62 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index a7733d4d..21ef6b1d 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,6 @@ }, "peerDependencies": { "picomatch": "^2.2.3", - "csv-parse": "^4.15.3", "buffer": "^6.0.3" }, "dependencies": { diff --git a/src/util/util.ts b/src/util/util.ts index 33776eb0..d8a490d5 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -15,7 +15,6 @@ // escapeAssertion escapes the dots in the assertion, // because the expression evaluation doesn't support such variable names. -import parse from 'csv-parse/lib/sync'; import { RoleManager } from '../rbac'; function escapeAssertion(s: string): string { @@ -157,11 +156,66 @@ function policyArrayToString(policy: string[]): string { } function policyStringToArray(policy: string): string[][] { - return parse(policy, { - delimiter: ',', - skip_empty_lines: true, - trim: true, - }); + const endCommaRe = /,$/; + const quotaWrapperRe = /^".*"$/; + + const lines: string[] = policy.split(/\r?\n/); + const arrays: string[][] = []; + + for (let line of lines) { + const commentLabel = line.indexOf('#'); + if (commentLabel !== -1) { + line = line.substr(0, commentLabel); + } + + line = line.trim(); + + if (endCommaRe.test(line)) { + throw new Error('The csv standard does not allow a comma at the end of a sentence'); + } + + const slices = line.split(','); + let tokens: string[] = []; + + for (let slice of slices) { + slice = slice.trim(); + + // Remove parcel quotes + if (quotaWrapperRe.test(slice)) { + slice = slice.substr(1, slice.length - 2); + } + + if (slice.includes('""')) { + // "" Escape processing + const quotaSequence: number[] = []; + + let pos = slice.indexOf('"'); + while (pos !== -1) { + quotaSequence.push(pos); + pos = slice.indexOf('"', pos + 1); + } + + if (quotaSequence.length % 2 !== 0) { + throw new Error('Number of quotation marks does not match'); + } + + for (let i = 0; i < quotaSequence.length; ) { + if (quotaSequence[i] !== quotaSequence[i + 1] - 1) { + throw new Error(`Unescaped " at ${line}`); + } + i += 2; + } + + slice = slice.replace(/""/g, '"'); + } + + tokens.push(slice); + } + + arrays.push(deepCopy(tokens)); + tokens = []; + } + return arrays; } function isRoleManagerSync(rm: RoleManager): boolean { diff --git a/test/util.test.ts b/test/util.test.ts index 137d4d6f..35a47208 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -161,7 +161,8 @@ test('test getEvalValue', () => { }); test('test policyStringToArray', () => { - expect(util.policyStringToArray('p,alice,data1,read')).toEqual([['p', 'alice', 'data1', 'read']]); + expect(util.policyStringToArray('p,alice,data1,read#testtest')).toEqual([['p', 'alice', 'data1', 'read']]); + expect(util.policyStringToArray('p,ali""ce,data1,read')).toEqual([['p', 'ali"ce', 'data1', 'read']]); expect(util.policyStringToArray(`"p","alice","data1","read"`)).toEqual([['p', 'alice', 'data1', 'read']]); expect(util.policyStringToArray(`"p"," alice","data1 ","read"`)).toEqual([['p', ' alice', 'data1 ', 'read']]); expect(util.policyStringToArray(`p,alice,data1,read\np,bob,data1,write`)).toEqual([ From ce53d93324cd52cee04fc176befd9e338d9de02e Mon Sep 17 00:00:00 2001 From: Zxilly Date: Wed, 18 Aug 2021 21:24:05 +0800 Subject: [PATCH 475/497] refactor: remove support for inline comment Signed-off-by: Zxilly --- src/util/util.ts | 15 +++++++++++---- test/util.test.ts | 4 +++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/util/util.ts b/src/util/util.ts index d8a490d5..db836135 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -158,14 +158,19 @@ function policyArrayToString(policy: string[]): string { function policyStringToArray(policy: string): string[][] { const endCommaRe = /,$/; const quotaWrapperRe = /^".*"$/; + const commentLineRe = /^\s*#/; + const emptyLineRe = /^\s*$/; const lines: string[] = policy.split(/\r?\n/); const arrays: string[][] = []; for (let line of lines) { - const commentLabel = line.indexOf('#'); - if (commentLabel !== -1) { - line = line.substr(0, commentLabel); + if (commentLineRe.test(line)) { + continue; + } + + if (emptyLineRe.test(line)) { + continue; } line = line.trim(); @@ -209,7 +214,9 @@ function policyStringToArray(policy: string): string[][] { slice = slice.replace(/""/g, '"'); } - tokens.push(slice); + if (slice) { + tokens.push(slice); + } } arrays.push(deepCopy(tokens)); diff --git a/test/util.test.ts b/test/util.test.ts index 35a47208..36185693 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -161,7 +161,9 @@ test('test getEvalValue', () => { }); test('test policyStringToArray', () => { - expect(util.policyStringToArray('p,alice,data1,read#testtest')).toEqual([['p', 'alice', 'data1', 'read']]); + expect(util.policyStringToArray('p,alice,data1,read')).toEqual([['p', 'alice', 'data1', 'read']]); + expect(util.policyStringToArray('p,alice,data1,read#233')).toEqual([['p', 'alice', 'data1', 'read#233']]); + expect(util.policyStringToArray('#p,alice,data1,read')).toEqual([]); expect(util.policyStringToArray('p,ali""ce,data1,read')).toEqual([['p', 'ali"ce', 'data1', 'read']]); expect(util.policyStringToArray(`"p","alice","data1","read"`)).toEqual([['p', 'alice', 'data1', 'read']]); expect(util.policyStringToArray(`"p"," alice","data1 ","read"`)).toEqual([['p', ' alice', 'data1 ', 'read']]); From 5b826fce3a5a7e65af2f620550f8f44b0784ae61 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Wed, 18 Aug 2021 21:29:01 +0800 Subject: [PATCH 476/497] refactor: enhance quota escape check Signed-off-by: Zxilly --- src/util/util.ts | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/util/util.ts b/src/util/util.ts index db836135..6f00afd7 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -192,23 +192,14 @@ function policyStringToArray(policy: string): string[][] { if (slice.includes('""')) { // "" Escape processing - const quotaSequence: number[] = []; - - let pos = slice.indexOf('"'); - while (pos !== -1) { - quotaSequence.push(pos); - pos = slice.indexOf('"', pos + 1); - } - - if (quotaSequence.length % 2 !== 0) { - throw new Error('Number of quotation marks does not match'); - } - - for (let i = 0; i < quotaSequence.length; ) { - if (quotaSequence[i] !== quotaSequence[i + 1] - 1) { - throw new Error(`Unescaped " at ${line}`); + for (let i = 0; i < slice.length; ) { + if (slice[i] === '"') { + if (slice[i + 1] !== '"') { + throw new Error(`Unescaped " at ${line}`); + } + i += 2; } - i += 2; + i += 1; } slice = slice.replace(/""/g, '"'); From aa92d40851d605d482b2a32841120bd30baff9eb Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Thu, 19 Aug 2021 23:00:31 +0800 Subject: [PATCH 477/497] fix: rename StringAdapter to MemoryAdapter Signed-off-by: Zixuan Liu --- src/enforcer.ts | 4 +- src/persist/defaultFilteredAdapter.ts | 18 ++--- src/persist/index.ts | 2 +- .../{stringAdapter.ts => memoryAdapter.ts} | 67 ++++++------------- test/enforcer.test.ts | 18 ++--- test/utils.ts | 6 +- 6 files changed, 42 insertions(+), 73 deletions(-) rename src/persist/{stringAdapter.ts => memoryAdapter.ts} (62%) diff --git a/src/enforcer.ts b/src/enforcer.ts index def16153..f4fe4665 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -14,7 +14,7 @@ import { ManagementEnforcer } from './managementEnforcer'; import { Model, newModel } from './model'; -import { Adapter, StringAdapter } from './persist'; +import { Adapter, MemoryAdapter } from './persist'; import { getLogger } from './log'; import { arrayRemoveDuplicates } from './util'; import { RoleManager } from './rbac'; @@ -30,7 +30,7 @@ export class Enforcer extends ManagementEnforcer { * @param lazyLoad whether to load policy at initial time */ public async initWithString(modelPath: string, policyString: string, lazyLoad = false): Promise { - const a = new StringAdapter(policyString); + const a = new MemoryAdapter(policyString); await this.initWithAdapter(modelPath, a, lazyLoad); } diff --git a/src/persist/defaultFilteredAdapter.ts b/src/persist/defaultFilteredAdapter.ts index 05ecbb7f..272200e8 100644 --- a/src/persist/defaultFilteredAdapter.ts +++ b/src/persist/defaultFilteredAdapter.ts @@ -1,18 +1,19 @@ import { FilteredAdapter } from './filteredAdapter'; import { Model } from '../model'; import { Helper } from './helper'; -import { StringAdapter } from './stringAdapter'; +import { MemoryAdapter } from './memoryAdapter'; +import { policyArrayToString, policyStringToArray } from '../util'; export class Filter { public g: string[] = []; public p: string[] = []; } -export class DefaultFilteredAdapter extends StringAdapter implements FilteredAdapter { +export class DefaultFilteredAdapter extends MemoryAdapter implements FilteredAdapter { private filtered: boolean; - constructor(filePath: string) { - super(filePath); + constructor(policy: string) { + super(policy); this.filtered = false; } @@ -28,18 +29,13 @@ export class DefaultFilteredAdapter extends StringAdapter implements FilteredAda return; } - if (!this.policy) { - return; - } - await this.loadFilteredPolicyFile(model, filter, Helper.loadPolicyLine); this.filtered = true; } private async loadFilteredPolicyFile(model: Model, filter: Filter, handler: (line: string, model: Model) => void): Promise { - const lines = this.policy.split('\n'); - lines.forEach((n: string, index: number) => { - const line = n; + this.policies.forEach((n: string[]) => { + const line = policyArrayToString(n); if (!line || DefaultFilteredAdapter.filterLine(line, filter)) { return; } diff --git a/src/persist/index.ts b/src/persist/index.ts index f7bd19f7..2a968bf0 100644 --- a/src/persist/index.ts +++ b/src/persist/index.ts @@ -1,5 +1,5 @@ export * from './adapter'; -export * from './stringAdapter'; +export * from './memoryAdapter'; export * from './helper'; export * from './watcher'; export * from './filteredAdapter'; diff --git a/src/persist/stringAdapter.ts b/src/persist/memoryAdapter.ts similarity index 62% rename from src/persist/stringAdapter.ts rename to src/persist/memoryAdapter.ts index 7b1c152e..bf33135c 100644 --- a/src/persist/stringAdapter.ts +++ b/src/persist/memoryAdapter.ts @@ -2,24 +2,28 @@ import { Adapter } from './adapter'; import { Model } from '../model'; import { Helper } from './helper'; import { BatchAdapter } from './batchAdapter'; -import * as util from '../util'; -import { arrayEquals } from '../util'; +import { arrayEquals, policyArrayToString, policyStringToArray } from '../util'; /** - * StringAdapter is the string adapter for Casbin. + * MemoryAdapter is the memory adapter for Casbin. * It can load policy from a string. */ -export class StringAdapter implements Adapter, BatchAdapter { - public policy: string; - private policies: string[][] = []; +export class MemoryAdapter implements Adapter, BatchAdapter { + protected policies: string[][] = []; /** - * StringAdapter is the constructor for StringAdapter. - * @param {string} policy policy formatted as a CSV string. + * MemoryAdapter is the constructor for MemoryAdapter. + * @param policy - policy formatted as a CSV string, or policy array. */ - - constructor(policy: string) { - this.policy = policy; + constructor(policy: string | string[][]) { + if (!policy) { + return; + } + if (typeof policy === 'string') { + this.policies = policyStringToArray(policy); + } else { + this.policies = policy; + } } /** @@ -27,7 +31,7 @@ export class StringAdapter implements Adapter, BatchAdapter { */ public hasPolicy(policy: string[]): boolean { return this.policies.some((prePolicy) => { - return util.arrayEquals(prePolicy, policy); + return arrayEquals(prePolicy, policy); }); } @@ -36,19 +40,11 @@ export class StringAdapter implements Adapter, BatchAdapter { * @param model */ public async loadPolicy(model: Model): Promise { - if (!this.policy) { - return; - } - await this.loadRules(model, Helper.loadPolicyLine); - } - - private async loadRules(model: Model, handler: (line: string, model: Model) => void): Promise { - const rules = this.policy.split('\n'); - rules.forEach((n: string, index: number) => { + this.policies.forEach((n: string[]) => { if (!n) { return; } - handler(n, model); + Helper.loadPolicyLine(policyArrayToString(n), model); }); } @@ -56,8 +52,7 @@ export class StringAdapter implements Adapter, BatchAdapter { * savePolicy saves all policy rules to the storage. */ public async savePolicy(model: Model): Promise { - this.policy = await this.getPolicy(); - return true; + throw new Error('not implemented'); } /** @@ -77,29 +72,7 @@ export class StringAdapter implements Adapter, BatchAdapter { public async removePolicy(sec: string, ptype: string, rule: string[]): Promise { const ruleClone = rule.slice(); ruleClone.unshift(ptype); - this.policies.filter((r) => !util.arrayEquals(ruleClone, r)); - } - - /** - * getPolicy get the storage string - */ - public async getPolicy(): Promise { - return this.policies - .map((p) => - p - .map((value) => { - return '"' + value + '"'; - }) - .join(', ') - ) - .join('\n'); - } - - /** - * getPolicies get policies array - */ - public async getPolicies(): Promise { - return this.policies; + this.policies = this.policies.filter((r) => !arrayEquals(ruleClone, r)); } /** diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 1b736e7c..539fa66c 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -14,7 +14,7 @@ import { readFileSync } from 'fs'; -import { newModel, newEnforcer, Enforcer, StringAdapter, Util } from '../src'; +import { newModel, newEnforcer, Enforcer, MemoryAdapter, Util } from '../src'; import { getEnforcerWithPath, getStringAdapter } from './utils'; async function testEnforce(e: Enforcer, sub: any, obj: string, act: string, res: boolean): Promise { @@ -279,7 +279,7 @@ test('TestReloadPolicy', async () => { test('TestSavePolicy', async () => { const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_policy.csv'); - await e.savePolicy(); + expect(e.savePolicy()).rejects.toThrowError(new Error('not implemented')); }); test('TestClearPolicy', async () => { @@ -392,7 +392,7 @@ test('TestInitWithAdapter', async () => { test('TestInitWithStringAdapter', async () => { const policy = readFileSync('examples/basic_policy.csv').toString(); - const adapter = new StringAdapter(policy); + const adapter = new MemoryAdapter(policy); const e = await getEnforcerWithPath('examples/basic_model.conf', adapter); await testEnforce(e, 'alice', 'data1', 'read', true); @@ -456,7 +456,7 @@ test('TestSetAdapterFromString', async () => { const policy = readFileSync('examples/basic_policy.csv').toString(); - const a = new StringAdapter(policy); + const a = new MemoryAdapter(policy); e.setAdapter(a); await e.loadPolicy(); @@ -491,7 +491,7 @@ test('TestInitEmpty with String Adapter', async () => { m.addDef('m', 'm', 'r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)'); const policy = readFileSync('examples/keymatch_policy.csv').toString(); - const a = new StringAdapter(policy); + const a = new MemoryAdapter(policy); e.setModel(m); e.setAdapter(a); @@ -502,7 +502,7 @@ test('TestInitEmpty with String Adapter', async () => { describe('Unimplemented File Adapter methods', () => { let e = {} as Enforcer; - let a = {} as StringAdapter; + let a = {} as MemoryAdapter; beforeEach(async () => { a = getStringAdapter('examples/basic_policy.csv'); @@ -516,11 +516,11 @@ describe('Unimplemented File Adapter methods', () => { describe('Unimplemented String Adapter methods', () => { let e = {} as Enforcer; - let a = {} as StringAdapter; + let a = {} as MemoryAdapter; beforeEach(async () => { const policy = readFileSync('examples/basic_policy.csv').toString(); - a = new StringAdapter(policy); + a = new MemoryAdapter(policy); e = await getEnforcerWithPath('examples/basic_model.conf', a); }); @@ -620,7 +620,7 @@ test('test ABAC multiple eval()', async () => { m.addDef('e', 'e', 'some(where (p.eft == allow))'); m.addDef('m', 'm', 'eval(p.sub_rule_1) && eval(p.sub_rule_2) && r.act == p.act'); - const policy = new StringAdapter( + const policy = new MemoryAdapter( ` p, r.sub > 50, r.obj > 50, read ` diff --git a/test/utils.ts b/test/utils.ts index 57fac362..f51ca6de 100644 --- a/test/utils.ts +++ b/test/utils.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'fs'; -import { Adapter, Enforcer, Model, newEnforcer, StringAdapter } from '../src'; +import { Adapter, Enforcer, Model, newEnforcer, MemoryAdapter } from '../src'; export function path2Content(path: string): string { return readFileSync(path).toString().replace(new RegExp('\r\n', 'g'), '\n'); @@ -28,6 +28,6 @@ export async function getEnforcerWithPath( return await newEnforcer(modelPath, policyPath, logOption); } -export function getStringAdapter(path: string): StringAdapter { - return new StringAdapter(path2Content(path)); +export function getStringAdapter(path: string): MemoryAdapter { + return new MemoryAdapter(path2Content(path)); } From e331585050cd4a8003cc781ffb4b9e05f7b0cfe1 Mon Sep 17 00:00:00 2001 From: Zxilly Date: Sat, 21 Aug 2021 12:23:57 +0800 Subject: [PATCH 478/497] refactor: Remove file-related comments and arguments (#169) * refactor: Remove file-related comments and arguments Signed-off-by: Zxilly * refactor: rename argument Signed-off-by: Zxilly --- src/cachedEnforcer.ts | 2 +- src/config.ts | 6 +++--- src/coreEnforcer.ts | 10 +++++----- src/enforcer.ts | 14 +++++++------- src/model/model.ts | 6 +++--- src/syncedEnforcer.ts | 6 +++--- test/enforcer.test.ts | 2 -- 7 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/cachedEnforcer.ts b/src/cachedEnforcer.ts index 692b236b..716ba484 100644 --- a/src/cachedEnforcer.ts +++ b/src/cachedEnforcer.ts @@ -74,7 +74,7 @@ export class CachedEnforcer extends Enforcer { } } -// newCachedEnforcer creates a cached enforcer via file or DB. +// newCachedEnforcer creates a cached enforcer via string or DB. export async function newCachedEnforcer(...params: any[]): Promise { return newEnforcerWithClass(CachedEnforcer, ...params); } diff --git a/src/config.ts b/src/config.ts index 63b283cb..9fc94cc8 100644 --- a/src/config.ts +++ b/src/config.ts @@ -42,12 +42,12 @@ export class Config implements ConfigInterface { /** * newConfig create an empty configuration representation from file. * - * @param confName the path of the model file. + * @param text the content of the model file. * @return the constructor of Config. */ - public static newConfig(confName: string): Config { + public static newConfig(text: string): Config { const config = new Config(); - config.parseText(confName); + config.parseText(text); return config; } diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index e4543a9d..9fa34f31 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -72,7 +72,7 @@ export class CoreEnforcer { } /** - * loadModel reloads the model from the model CONF file. + * loadModel reloads the model from the model CONF string. * Because the policy is attached to a model, * so the policy is invalidated and needs to be reloaded by calling LoadPolicy(). */ @@ -210,7 +210,7 @@ export class CoreEnforcer { } /** - * loadPolicy reloads the policy from file/database. + * loadPolicy reloads the policy from adapter. */ public async loadPolicy(): Promise { this.model.clearPolicy(); @@ -226,7 +226,7 @@ export class CoreEnforcer { } /** - * loadFilteredPolicy reloads a filtered policy from file/database. + * loadFilteredPolicy reloads a filtered policy from adapter. * * @param filter the filter used to specify which type of policy should be loaded. */ @@ -238,7 +238,7 @@ export class CoreEnforcer { } /** - * LoadIncrementalFilteredPolicy append a filtered policy from file/database. + * LoadIncrementalFilteredPolicy append a filtered policy from adapter. * * @param filter the filter used to specify which type of policy should be appended. */ @@ -274,7 +274,7 @@ export class CoreEnforcer { /** * savePolicy saves the current policy (usually after changed with - * Casbin API) back to file/database. + * Casbin API) back to adapter. */ public async savePolicy(): Promise { if (this.isFiltered()) { diff --git a/src/enforcer.ts b/src/enforcer.ts index f4fe4665..734ef66f 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -24,14 +24,14 @@ import { RoleManager } from './rbac'; */ export class Enforcer extends ManagementEnforcer { /** - * initWithFile initializes an enforcer with a model file and a policy file. - * @param modelPath model file path + * initWithString initializes an enforcer with a model file and a policy file. + * @param modelString model file content * @param policyString policy CSV string * @param lazyLoad whether to load policy at initial time */ - public async initWithString(modelPath: string, policyString: string, lazyLoad = false): Promise { + public async initWithString(modelString: string, policyString: string, lazyLoad = false): Promise { const a = new MemoryAdapter(policyString); - await this.initWithAdapter(modelPath, a, lazyLoad); + await this.initWithAdapter(modelString, a, lazyLoad); } /** @@ -401,11 +401,11 @@ export async function newEnforcerWithClass(enforcer: new () } /** - * newEnforcer creates an enforcer via file or DB. + * newEnforcer creates an enforcer via string or DB. * - * File: + * String: * ```js - * const e = new Enforcer('path/to/basic_model.conf', 'path/to/basic_policy.csv'); + * const e = new Enforcer('content of basic_model.conf', 'content of basic_policy.csv'); * ``` * * MySQL DB: diff --git a/src/model/model.ts b/src/model/model.ts index 981bb871..3581f1a7 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -121,9 +121,9 @@ export class Model { return true; } - // loadModel loads the model from model CONF file. - public loadModel(path: string): void { - const cfg = Config.newConfig(path); + // loadModel loads the model from model CONF string. + public loadModel(string: string): void { + const cfg = Config.newConfig(string); this.loadModelFromConfig(cfg); } diff --git a/src/syncedEnforcer.ts b/src/syncedEnforcer.ts index 7ae1fa61..283b331c 100644 --- a/src/syncedEnforcer.ts +++ b/src/syncedEnforcer.ts @@ -34,7 +34,7 @@ export class SyncedEnforcer extends Enforcer { } /** - * loadPolicy reloads the policy from file/database. + * loadPolicy reloads the policy from adapter. */ public async loadPolicy(): Promise { await this.lock.acquireAsync(); @@ -52,7 +52,7 @@ export class SyncedEnforcer extends Enforcer { } /** - * savePolicy saves the current policy (usually after changed with Casbin API) back to file/database. + * savePolicy saves the current policy (usually after changed with Casbin API) back to adapter. */ public async savePolicy(): Promise { await this.lock.acquireAsync(); @@ -514,7 +514,7 @@ export class SyncedEnforcer extends Enforcer { } } -// newSyncedEnforcer creates a synchronized enforcer via file or DB. +// newSyncedEnforcer creates a synchronized enforcer via adapter. export async function newSyncedEnforcer(...params: any[]): Promise { return newEnforcerWithClass(SyncedEnforcer, ...params); } diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 539fa66c..0b47a030 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -362,8 +362,6 @@ test('TestEnableAutoSave', async () => { // but also affects the policy in the storage. // await e.removePolicy('alice', 'data1', 'read'); - // However, the file adapter doesn't implement the AutoSave feature, so enabling it has no effect at all here. - // Reload the policy from the storage to see the effect. // await e.loadPolicy(); await testEnforce(e, 'alice', 'data1', 'read', true); // Will not be false here. From 8821ae6290a90cefdf2b77edf6821f4bb88d8618 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 22 Aug 2021 14:46:27 +0800 Subject: [PATCH 479/497] chore: prepare for bump to casbin.js@next Signed-off-by: Zixuan Liu --- .github/workflows/main.yml | 26 ++++++++++++------------ .releaserc.json | 8 ++++++++ README.md | 41 +++++++++++++++++++++++++++++--------- package.json | 8 ++++++-- 4 files changed, 59 insertions(+), 24 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e8a677cc..38017633 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,19 +24,6 @@ jobs: flag-name: run-${{ matrix.node-version }} parallel: true - # semantic-release: - # needs: [test] - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v2 - # - # - name: Run semantic-release - # if: github.repository == 'casbin/node-casbin' && github.event_name == 'push' - # run: yarn install --no-lockfile && yarn semantic-release - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - finish: needs: test runs-on: ubuntu-latest @@ -46,3 +33,16 @@ jobs: with: github-token: ${{ secrets.github_token }} parallel-finished: true + + semantic-release: + needs: [test, finish] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Run semantic-release + # only allowed in V1 branch. + if: github.repository == 'casbin/casbin.js' && github.event_name == 'push' && github.ref == 'refs/heads/v1' + run: yarn install && yarn semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.releaserc.json b/.releaserc.json index 4665ddf7..d1d20f60 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -1,5 +1,13 @@ { "debug": true, + "branches": [ + "master", + { + "name": "v1", + "channel": "beta", + "prerelease": "beta" + } + ], "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", diff --git a/README.md b/README.md index f74d2447..8f468165 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![NPM version][npm-image]][npm-url] [![NPM download][download-image]][download-url] -[![install size](https://packagephobia.now.sh/badge?p=casbin)](https://packagephobia.now.sh/result?p=casbin) +[![install size](https://packagephobia.now.sh/badge?p=casbin.js)](https://packagephobia.now.sh/result?p=casbin) [![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-casbin.js-master) [![GitHub Actions](https://github.com/casbin/casbin.js/workflows/main/badge.svg)](https://github.com/casbin/casbin.js/actions) [![Coverage Status](https://coveralls.io/repos/github/casbin/casbin.js/badge.svg?branch=master)](https://coveralls.io/github/casbin/casbin.js?branch=master) @@ -40,23 +40,46 @@ https://casbin.org/docs/en/overview ```shell script # NPM -npm install casbin --save +npm install casbin.js@next --save # Yarn -yarn add casbin +yarn add casbin.js@next ``` ## Get started -New a `casbin.js` enforcer with a model file and a policy file, see [Model](#official-model) section for details: +New a `casbin.js` enforcer with a model string and a memory policy, see [Model](#official-model) section for details: ```node.js -// For Node.js: -const { newEnforcer } = require('casbin'); -// For browser: -// import { newEnforcer } from 'casbin'; +import { newEnforcer, newModel, MemoryAdapter } from 'casbin.js'; -const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv'); +const model = newModel(` +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act +`); + +const adapter = new MemoryAdapter(` +p, alice, data1, read +p, bob, data2, write +p, data2_admin, data2, read +p, data2_admin, data2, write + +g, alice, data2_admin +`); + +const enforcer = await newEnforcer(model, adapter); ``` > **Note**: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details. diff --git a/package.json b/package.json index 21ef6b1d..a707d6cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "1.0.0", + "version": "0.0.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", @@ -67,7 +67,7 @@ "homepage": "https://casbin.org", "repository": { "type": "git", - "url": "https://github.com/casbin/node-casbin.git" + "url": "https://github.com/casbin/casbin.js.git" }, "license": "Apache-2.0", "husky": { @@ -80,5 +80,9 @@ "commitizen": { "path": "./node_modules/cz-conventional-changelog" } + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "tag": "next" } } From 0cb98cfa27b62b7ea4928d6b55f5e655f579abe4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 22 Aug 2021 06:48:50 +0000 Subject: [PATCH 480/497] chore(release): 1.0.0-beta.1 [skip ci] # 1.0.0-beta.1 (2021-08-22) ### Bug Fixes * `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/casbin.js/issues/272)) ([0d59239](https://github.com/casbin/casbin.js/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) * add cache to generateGFunction ([e90bed2](https://github.com/casbin/casbin.js/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) * add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/casbin.js/commit/b85673432f8a150490fd5134797508ccd368b81f)) * add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/casbin.js/commit/a415838a514706af8a9399c899959bdb069619d4)) * add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/casbin.js/commit/6e144fb9a895332245006ef3a28c47d022654895)) * Add examples. ([5cf950a](https://github.com/casbin/casbin.js/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) * Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/casbin.js/commit/3804c3d76802614104016a011c07c11c54a94632)) * add missing await ([523ce85](https://github.com/casbin/casbin.js/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) * Add tests for batch operations. ([e6ad7af](https://github.com/casbin/casbin.js/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) * Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/casbin.js/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) * Added util functions and util tests. ([72918bc](https://github.com/casbin/casbin.js/commit/72918bc677e898251dd4375516c31254e79eb6b8)) * check adapter type ([a74314d](https://github.com/casbin/casbin.js/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) * compatible types ([58242a5](https://github.com/casbin/casbin.js/commit/58242a56f9f72b1a06e4901867f502b73674d640)) * downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/casbin.js/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) * downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/casbin.js/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) * fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/casbin.js/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) * fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/casbin.js/issues/251)) ([98c11f1](https://github.com/casbin/casbin.js/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) * fix errror type ([dc9e5b5](https://github.com/casbin/casbin.js/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) * fix logic error and add unittests ([82124e3](https://github.com/casbin/casbin.js/commit/82124e3dccfbee9a2a9b75606ff1d4d2c4c03202)) * fix unexpected parser action ([3074fa9](https://github.com/casbin/casbin.js/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) * getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/casbin.js/commit/584624c99eabca68fc790d66fc4737511d92b074)) * ignore print model ([f426131](https://github.com/casbin/casbin.js/commit/f426131e752143251db6c11a7352d91d959cb503)) * improve load policy line ([9f12511](https://github.com/casbin/casbin.js/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) * improve tokens separator ([687e96f](https://github.com/casbin/casbin.js/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) * improve update into adapter before model ([0e9ccc6](https://github.com/casbin/casbin.js/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) * Merge conflicts. ([7179b17](https://github.com/casbin/casbin.js/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) * remove lodash ([293a852](https://github.com/casbin/casbin.js/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) * remove unused import ([2f8801c](https://github.com/casbin/casbin.js/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) * remove use spread operator with await in array ([6e4f876](https://github.com/casbin/casbin.js/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) * rename StringAdapter to MemoryAdapter ([aa92d40](https://github.com/casbin/casbin.js/commit/aa92d40851d605d482b2a32841120bd30baff9eb)) * stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/casbin.js/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) * support comments after expression ([c97cb26](https://github.com/casbin/casbin.js/commit/c97cb26441d79316960a0464e8d56918859d969c)) * Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/casbin.js/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) * support pattern function in 3rd args of g ([#199](https://github.com/casbin/casbin.js/issues/199)) ([27005f8](https://github.com/casbin/casbin.js/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) * tests. ([4da5291](https://github.com/casbin/casbin.js/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) * transfer from micromatch to picomatch ([#264](https://github.com/casbin/casbin.js/issues/264)) ([6be1b06](https://github.com/casbin/casbin.js/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) * update expression-eval ([95de296](https://github.com/casbin/casbin.js/commit/95de29650251af781d8638011dcc5cabeef2784c)) * use csv-like format ([32ec20d](https://github.com/casbin/casbin.js/commit/32ec20d07ff1c0f21c910a450398d7163ca1d1be)) * **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/casbin.js/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/casbin.js/issues/214) * **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/casbin.js/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/casbin.js/issues/118) * **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/casbin.js/issues/211)) ([4f3ba65](https://github.com/casbin/casbin.js/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) * update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/casbin.js/issues/186)) ([6c277e8](https://github.com/casbin/casbin.js/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) ### Features * add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/casbin.js/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) * add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/casbin.js/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) * add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/casbin.js/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) * add enforceEx() ([#271](https://github.com/casbin/casbin.js/issues/271)) ([762efd9](https://github.com/casbin/casbin.js/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) * add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/casbin.js/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) * add glob pattern to built-in function ([8415fc2](https://github.com/casbin/casbin.js/commit/8415fc2648796d033c85771e27219bd32541982e)) * add initRmMap ([87f8011](https://github.com/casbin/casbin.js/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) * Add lazyload option at enforcer init method ([#289](https://github.com/casbin/casbin.js/issues/289)) ([e858dcb](https://github.com/casbin/casbin.js/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) * add named addMatchingFunc ([65d3a26](https://github.com/casbin/casbin.js/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) * add policyArrayToString and policyStringToArray to util ([e71b40f](https://github.com/casbin/casbin.js/commit/e71b40fc1917f1f8bd4f64d24372f6044c052102)) * add priority_policy_explicit support ([#250](https://github.com/casbin/casbin.js/issues/250)) ([763c18e](https://github.com/casbin/casbin.js/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) * add support for `in` operator ([a44c6a9](https://github.com/casbin/casbin.js/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) * add sync mode ([70e4e12](https://github.com/casbin/casbin.js/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) * add unittest ([3cd5b73](https://github.com/casbin/casbin.js/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) * add updatePolicy() ([#234](https://github.com/casbin/casbin.js/issues/234)) ([a3218f1](https://github.com/casbin/casbin.js/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/casbin.js/issues/235) * avoid miss initialize() ([1394e8d](https://github.com/casbin/casbin.js/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) * changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/casbin.js/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) * controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/casbin.js/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) * enforceSync ([ff41f0a](https://github.com/casbin/casbin.js/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) * implement csv parser ([f2ddaab](https://github.com/casbin/casbin.js/commit/f2ddaab9223cd83d21978c473525b469cd419a4b)) * implement string adapater ([fabd784](https://github.com/casbin/casbin.js/commit/fabd784ff5f2c2dbb0e1ddc3867b18adeb423da8)) * implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/casbin.js/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) * improve effector for improve performance ([57de7b2](https://github.com/casbin/casbin.js/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) * support RBAC for syncedEnforcer ([#150](https://github.com/casbin/casbin.js/issues/150)) ([2bf4299](https://github.com/casbin/casbin.js/commit/2bf42996d035eaa4dd659d781f2ce6b89fc396df)) * sync with upstream ([ca4b572](https://github.com/casbin/casbin.js/commit/ca4b57268f0cfe362a46237d583fd907578423d0)) * synchronized enforcer ([ecec514](https://github.com/casbin/casbin.js/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) * use new license format ([284d2a4](https://github.com/casbin/casbin.js/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) ### improvement * convert all management_api to async function ([e9f4d38](https://github.com/casbin/casbin.js/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) ### BREAKING CHANGES * **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] * - provides a new interface for Effector * see # --- CHANGELOG.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..dab29253 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,90 @@ +# 1.0.0-beta.1 (2021-08-22) + + +### Bug Fixes + +* `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/casbin.js/issues/272)) ([0d59239](https://github.com/casbin/casbin.js/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) +* add cache to generateGFunction ([e90bed2](https://github.com/casbin/casbin.js/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) +* add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/casbin.js/commit/b85673432f8a150490fd5134797508ccd368b81f)) +* add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/casbin.js/commit/a415838a514706af8a9399c899959bdb069619d4)) +* add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/casbin.js/commit/6e144fb9a895332245006ef3a28c47d022654895)) +* Add examples. ([5cf950a](https://github.com/casbin/casbin.js/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) +* Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/casbin.js/commit/3804c3d76802614104016a011c07c11c54a94632)) +* add missing await ([523ce85](https://github.com/casbin/casbin.js/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) +* Add tests for batch operations. ([e6ad7af](https://github.com/casbin/casbin.js/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) +* Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/casbin.js/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) +* Added util functions and util tests. ([72918bc](https://github.com/casbin/casbin.js/commit/72918bc677e898251dd4375516c31254e79eb6b8)) +* check adapter type ([a74314d](https://github.com/casbin/casbin.js/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) +* compatible types ([58242a5](https://github.com/casbin/casbin.js/commit/58242a56f9f72b1a06e4901867f502b73674d640)) +* downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/casbin.js/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) +* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/casbin.js/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) +* fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/casbin.js/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) +* fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/casbin.js/issues/251)) ([98c11f1](https://github.com/casbin/casbin.js/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) +* fix errror type ([dc9e5b5](https://github.com/casbin/casbin.js/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) +* fix logic error and add unittests ([82124e3](https://github.com/casbin/casbin.js/commit/82124e3dccfbee9a2a9b75606ff1d4d2c4c03202)) +* fix unexpected parser action ([3074fa9](https://github.com/casbin/casbin.js/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) +* getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/casbin.js/commit/584624c99eabca68fc790d66fc4737511d92b074)) +* ignore print model ([f426131](https://github.com/casbin/casbin.js/commit/f426131e752143251db6c11a7352d91d959cb503)) +* improve load policy line ([9f12511](https://github.com/casbin/casbin.js/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) +* improve tokens separator ([687e96f](https://github.com/casbin/casbin.js/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) +* improve update into adapter before model ([0e9ccc6](https://github.com/casbin/casbin.js/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) +* Merge conflicts. ([7179b17](https://github.com/casbin/casbin.js/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) +* remove lodash ([293a852](https://github.com/casbin/casbin.js/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) +* remove unused import ([2f8801c](https://github.com/casbin/casbin.js/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) +* remove use spread operator with await in array ([6e4f876](https://github.com/casbin/casbin.js/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) +* rename StringAdapter to MemoryAdapter ([aa92d40](https://github.com/casbin/casbin.js/commit/aa92d40851d605d482b2a32841120bd30baff9eb)) +* stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/casbin.js/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) +* support comments after expression ([c97cb26](https://github.com/casbin/casbin.js/commit/c97cb26441d79316960a0464e8d56918859d969c)) +* Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/casbin.js/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) +* support pattern function in 3rd args of g ([#199](https://github.com/casbin/casbin.js/issues/199)) ([27005f8](https://github.com/casbin/casbin.js/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) +* tests. ([4da5291](https://github.com/casbin/casbin.js/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) +* transfer from micromatch to picomatch ([#264](https://github.com/casbin/casbin.js/issues/264)) ([6be1b06](https://github.com/casbin/casbin.js/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) +* update expression-eval ([95de296](https://github.com/casbin/casbin.js/commit/95de29650251af781d8638011dcc5cabeef2784c)) +* use csv-like format ([32ec20d](https://github.com/casbin/casbin.js/commit/32ec20d07ff1c0f21c910a450398d7163ca1d1be)) +* **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/casbin.js/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/casbin.js/issues/214) +* **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/casbin.js/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/casbin.js/issues/118) +* **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/casbin.js/issues/211)) ([4f3ba65](https://github.com/casbin/casbin.js/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) +* update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/casbin.js/issues/186)) ([6c277e8](https://github.com/casbin/casbin.js/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) + + +### Features + +* add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/casbin.js/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) +* add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/casbin.js/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) +* add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/casbin.js/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) +* add enforceEx() ([#271](https://github.com/casbin/casbin.js/issues/271)) ([762efd9](https://github.com/casbin/casbin.js/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) +* add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/casbin.js/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) +* add glob pattern to built-in function ([8415fc2](https://github.com/casbin/casbin.js/commit/8415fc2648796d033c85771e27219bd32541982e)) +* add initRmMap ([87f8011](https://github.com/casbin/casbin.js/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) +* Add lazyload option at enforcer init method ([#289](https://github.com/casbin/casbin.js/issues/289)) ([e858dcb](https://github.com/casbin/casbin.js/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) +* add named addMatchingFunc ([65d3a26](https://github.com/casbin/casbin.js/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) +* add policyArrayToString and policyStringToArray to util ([e71b40f](https://github.com/casbin/casbin.js/commit/e71b40fc1917f1f8bd4f64d24372f6044c052102)) +* add priority_policy_explicit support ([#250](https://github.com/casbin/casbin.js/issues/250)) ([763c18e](https://github.com/casbin/casbin.js/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) +* add support for `in` operator ([a44c6a9](https://github.com/casbin/casbin.js/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) +* add sync mode ([70e4e12](https://github.com/casbin/casbin.js/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) +* add unittest ([3cd5b73](https://github.com/casbin/casbin.js/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) +* add updatePolicy() ([#234](https://github.com/casbin/casbin.js/issues/234)) ([a3218f1](https://github.com/casbin/casbin.js/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/casbin.js/issues/235) +* avoid miss initialize() ([1394e8d](https://github.com/casbin/casbin.js/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) +* changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/casbin.js/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) +* controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/casbin.js/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) +* enforceSync ([ff41f0a](https://github.com/casbin/casbin.js/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) +* implement csv parser ([f2ddaab](https://github.com/casbin/casbin.js/commit/f2ddaab9223cd83d21978c473525b469cd419a4b)) +* implement string adapater ([fabd784](https://github.com/casbin/casbin.js/commit/fabd784ff5f2c2dbb0e1ddc3867b18adeb423da8)) +* implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/casbin.js/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) +* improve effector for improve performance ([57de7b2](https://github.com/casbin/casbin.js/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) +* support RBAC for syncedEnforcer ([#150](https://github.com/casbin/casbin.js/issues/150)) ([2bf4299](https://github.com/casbin/casbin.js/commit/2bf42996d035eaa4dd659d781f2ce6b89fc396df)) +* sync with upstream ([ca4b572](https://github.com/casbin/casbin.js/commit/ca4b57268f0cfe362a46237d583fd907578423d0)) +* synchronized enforcer ([ecec514](https://github.com/casbin/casbin.js/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) +* use new license format ([284d2a4](https://github.com/casbin/casbin.js/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) + + +### improvement + +* convert all management_api to async function ([e9f4d38](https://github.com/casbin/casbin.js/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) + + +### BREAKING CHANGES + +* **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] +* - provides a new interface for Effector +* see # diff --git a/package.json b/package.json index a707d6cf..48239929 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "0.0.0", + "version": "1.0.0-beta.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From a5034c889c38a45010241a41173ed4f6ed8ce34f Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sun, 22 Aug 2021 15:44:20 +0800 Subject: [PATCH 481/497] fix: fix ts4 build configuration Signed-off-by: Zixuan Liu --- CHANGELOG.md | 90 +++------------------------------------------------ tsconfig.json | 5 +-- 2 files changed, 7 insertions(+), 88 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dab29253..7c610170 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,90 +1,8 @@ # 1.0.0-beta.1 (2021-08-22) - -### Bug Fixes - -* `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/casbin.js/issues/272)) ([0d59239](https://github.com/casbin/casbin.js/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) -* add cache to generateGFunction ([e90bed2](https://github.com/casbin/casbin.js/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) -* add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/casbin.js/commit/b85673432f8a150490fd5134797508ccd368b81f)) -* add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/casbin.js/commit/a415838a514706af8a9399c899959bdb069619d4)) -* add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/casbin.js/commit/6e144fb9a895332245006ef3a28c47d022654895)) -* Add examples. ([5cf950a](https://github.com/casbin/casbin.js/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) -* Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/casbin.js/commit/3804c3d76802614104016a011c07c11c54a94632)) -* add missing await ([523ce85](https://github.com/casbin/casbin.js/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) -* Add tests for batch operations. ([e6ad7af](https://github.com/casbin/casbin.js/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) -* Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/casbin.js/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) -* Added util functions and util tests. ([72918bc](https://github.com/casbin/casbin.js/commit/72918bc677e898251dd4375516c31254e79eb6b8)) -* check adapter type ([a74314d](https://github.com/casbin/casbin.js/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) -* compatible types ([58242a5](https://github.com/casbin/casbin.js/commit/58242a56f9f72b1a06e4901867f502b73674d640)) -* downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/casbin.js/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) -* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/casbin.js/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) -* fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/casbin.js/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) -* fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/casbin.js/issues/251)) ([98c11f1](https://github.com/casbin/casbin.js/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) -* fix errror type ([dc9e5b5](https://github.com/casbin/casbin.js/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) -* fix logic error and add unittests ([82124e3](https://github.com/casbin/casbin.js/commit/82124e3dccfbee9a2a9b75606ff1d4d2c4c03202)) -* fix unexpected parser action ([3074fa9](https://github.com/casbin/casbin.js/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) -* getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/casbin.js/commit/584624c99eabca68fc790d66fc4737511d92b074)) -* ignore print model ([f426131](https://github.com/casbin/casbin.js/commit/f426131e752143251db6c11a7352d91d959cb503)) -* improve load policy line ([9f12511](https://github.com/casbin/casbin.js/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) -* improve tokens separator ([687e96f](https://github.com/casbin/casbin.js/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) -* improve update into adapter before model ([0e9ccc6](https://github.com/casbin/casbin.js/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) -* Merge conflicts. ([7179b17](https://github.com/casbin/casbin.js/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) -* remove lodash ([293a852](https://github.com/casbin/casbin.js/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) -* remove unused import ([2f8801c](https://github.com/casbin/casbin.js/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) -* remove use spread operator with await in array ([6e4f876](https://github.com/casbin/casbin.js/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) -* rename StringAdapter to MemoryAdapter ([aa92d40](https://github.com/casbin/casbin.js/commit/aa92d40851d605d482b2a32841120bd30baff9eb)) -* stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/casbin.js/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) -* support comments after expression ([c97cb26](https://github.com/casbin/casbin.js/commit/c97cb26441d79316960a0464e8d56918859d969c)) -* Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/casbin.js/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) -* support pattern function in 3rd args of g ([#199](https://github.com/casbin/casbin.js/issues/199)) ([27005f8](https://github.com/casbin/casbin.js/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) -* tests. ([4da5291](https://github.com/casbin/casbin.js/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) -* transfer from micromatch to picomatch ([#264](https://github.com/casbin/casbin.js/issues/264)) ([6be1b06](https://github.com/casbin/casbin.js/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) -* update expression-eval ([95de296](https://github.com/casbin/casbin.js/commit/95de29650251af781d8638011dcc5cabeef2784c)) -* use csv-like format ([32ec20d](https://github.com/casbin/casbin.js/commit/32ec20d07ff1c0f21c910a450398d7163ca1d1be)) -* **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/casbin.js/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/casbin.js/issues/214) -* **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/casbin.js/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/casbin.js/issues/118) -* **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/casbin.js/issues/211)) ([4f3ba65](https://github.com/casbin/casbin.js/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) -* update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/casbin.js/issues/186)) ([6c277e8](https://github.com/casbin/casbin.js/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) - - ### Features -* add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/casbin.js/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) -* add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/casbin.js/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) -* add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/casbin.js/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) -* add enforceEx() ([#271](https://github.com/casbin/casbin.js/issues/271)) ([762efd9](https://github.com/casbin/casbin.js/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) -* add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/casbin.js/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) -* add glob pattern to built-in function ([8415fc2](https://github.com/casbin/casbin.js/commit/8415fc2648796d033c85771e27219bd32541982e)) -* add initRmMap ([87f8011](https://github.com/casbin/casbin.js/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) -* Add lazyload option at enforcer init method ([#289](https://github.com/casbin/casbin.js/issues/289)) ([e858dcb](https://github.com/casbin/casbin.js/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) -* add named addMatchingFunc ([65d3a26](https://github.com/casbin/casbin.js/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) -* add policyArrayToString and policyStringToArray to util ([e71b40f](https://github.com/casbin/casbin.js/commit/e71b40fc1917f1f8bd4f64d24372f6044c052102)) -* add priority_policy_explicit support ([#250](https://github.com/casbin/casbin.js/issues/250)) ([763c18e](https://github.com/casbin/casbin.js/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) -* add support for `in` operator ([a44c6a9](https://github.com/casbin/casbin.js/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) -* add sync mode ([70e4e12](https://github.com/casbin/casbin.js/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) -* add unittest ([3cd5b73](https://github.com/casbin/casbin.js/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) -* add updatePolicy() ([#234](https://github.com/casbin/casbin.js/issues/234)) ([a3218f1](https://github.com/casbin/casbin.js/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/casbin.js/issues/235) -* avoid miss initialize() ([1394e8d](https://github.com/casbin/casbin.js/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) -* changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/casbin.js/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) -* controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/casbin.js/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) -* enforceSync ([ff41f0a](https://github.com/casbin/casbin.js/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) -* implement csv parser ([f2ddaab](https://github.com/casbin/casbin.js/commit/f2ddaab9223cd83d21978c473525b469cd419a4b)) -* implement string adapater ([fabd784](https://github.com/casbin/casbin.js/commit/fabd784ff5f2c2dbb0e1ddc3867b18adeb423da8)) -* implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/casbin.js/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) -* improve effector for improve performance ([57de7b2](https://github.com/casbin/casbin.js/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) -* support RBAC for syncedEnforcer ([#150](https://github.com/casbin/casbin.js/issues/150)) ([2bf4299](https://github.com/casbin/casbin.js/commit/2bf42996d035eaa4dd659d781f2ce6b89fc396df)) -* sync with upstream ([ca4b572](https://github.com/casbin/casbin.js/commit/ca4b57268f0cfe362a46237d583fd907578423d0)) -* synchronized enforcer ([ecec514](https://github.com/casbin/casbin.js/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) -* use new license format ([284d2a4](https://github.com/casbin/casbin.js/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) - - -### improvement - -* convert all management_api to async function ([e9f4d38](https://github.com/casbin/casbin.js/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) - - -### BREAKING CHANGES - -* **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] -* - provides a new interface for Effector -* see # +- convert [node-casbin](https://github.com/casbin/node-casbin) to [casbin.js](https://github.com/casbin/casbin.js) as pure JavaScript +- remove fs module +- remove the API with file operations +- add sync mode ([70e4e12](https://github.com/casbin/casbin.js/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) diff --git a/tsconfig.json b/tsconfig.json index db565bf0..1a142d25 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,8 @@ "declaration": true, "downlevelIteration": true, "allowSyntheticDefaultImports": true, - "esModuleInterop": true + "esModuleInterop": true, + "rootDir": "./src" }, - "include": ["src/**/*", "test/utils.ts"] + "include": ["src/**/*"] } From d64b12a5744e3a1114108ad10ca7a5d89179551f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 22 Aug 2021 07:46:54 +0000 Subject: [PATCH 482/497] chore(release): 1.0.0-beta.2 [skip ci] # [1.0.0-beta.2](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2021-08-22) ### Bug Fixes * fix ts4 build configuration ([a5034c8](https://github.com/casbin/casbin.js/commit/a5034c889c38a45010241a41173ed4f6ed8ce34f)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c610170..597be012 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.2](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2021-08-22) + + +### Bug Fixes + +* fix ts4 build configuration ([a5034c8](https://github.com/casbin/casbin.js/commit/a5034c889c38a45010241a41173ed4f6ed8ce34f)) + # 1.0.0-beta.1 (2021-08-22) ### Features diff --git a/package.json b/package.json index 48239929..da71a716 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "1.0.0-beta.1", + "version": "1.0.0-beta.2", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 2635601ab1b1dd8d613bbb6b62d52f1cb86400f6 Mon Sep 17 00:00:00 2001 From: Gabriel-403 <1499015923@qq.com> Date: Sat, 28 Aug 2021 18:26:00 +0800 Subject: [PATCH 483/497] feat: Multiple sections type Signed-off-by: Gabriel-403 <1499015923@qq.com> --- examples/mulitple_policy.csv | 2 ++ src/coreEnforcer.ts | 42 +++++++++++++++++----- src/enforceContext.ts | 20 +++++++++++ src/index.ts | 1 + src/util/util.ts | 6 ++-- test/enforcer.test.ts | 68 ++++++++++++++++++++++++++++++++++++ 6 files changed, 127 insertions(+), 12 deletions(-) create mode 100644 examples/mulitple_policy.csv create mode 100644 src/enforceContext.ts diff --git a/examples/mulitple_policy.csv b/examples/mulitple_policy.csv new file mode 100644 index 00000000..f896c69b --- /dev/null +++ b/examples/mulitple_policy.csv @@ -0,0 +1,2 @@ +p2, alice, data1, read +p2, bob, data2, write \ No newline at end of file diff --git a/src/coreEnforcer.ts b/src/coreEnforcer.ts index 9fa34f31..2e225f5c 100644 --- a/src/coreEnforcer.ts +++ b/src/coreEnforcer.ts @@ -18,6 +18,8 @@ import { DefaultEffector, Effect, Effector } from './effect'; import { FunctionMap, Model, newModel, PolicyOp } from './model'; import { Adapter, FilteredAdapter, Watcher } from './persist'; import { DefaultRoleManager, RoleManager } from './rbac'; +import { EnforceContext } from './enforceContext'; + import { escapeAssertion, generateGFunction, @@ -47,6 +49,7 @@ export class CoreEnforcer { protected fm: FunctionMap = FunctionMap.loadFunctionMap(); protected eft: Effector = new DefaultEffector(); private matcherMap: Map = new Map(); + private defaultEnforceContext: EnforceContext = new EnforceContext('r', 'p', 'e', 'm'); protected adapter: Adapter; protected watcher: Watcher | null = null; @@ -392,7 +395,12 @@ export class CoreEnforcer { } } - private *privateEnforce(asyncCompile = true, explain = false, ...rvals: any[]): EnforceResult { + private *privateEnforce( + asyncCompile = true, + explain = false, + enforceContext: EnforceContext = new EnforceContext('r', 'p', 'e', 'm'), + ...rvals: any[] + ): EnforceResult { if (!this.enabled) { return true; } @@ -411,12 +419,12 @@ export class CoreEnforcer { functions[key] = isRoleManagerSync(rm) ? generateSyncGFunction(rm) : generateGFunction(rm); }); - const expString = this.model.model.get('m')?.get('m')?.value; + const expString = this.model.model.get('m')?.get(enforceContext.mType)?.value; if (!expString) { throw new Error('Unable to find matchers in model'); } - const effectExpr = this.model.model.get('e')?.get('e')?.value; + const effectExpr = this.model.model.get('e')?.get(enforceContext.eType)?.value; if (!effectExpr) { throw new Error('Unable to find policy_effect in model'); } @@ -424,10 +432,10 @@ export class CoreEnforcer { const HasEval: boolean = hasEval(expString); let expression: Matcher | undefined = undefined; - const p = this.model.model.get('p')?.get('p'); + const p = this.model.model.get('p')?.get(enforceContext.pType); const policyLen = p?.policy?.length; - const rTokens = this.model.model.get('r')?.get('r')?.tokens; + const rTokens = this.model.model.get('r')?.get(enforceContext.rType)?.tokens; const rTokensLen = rTokens?.length; const effectStream = this.eft.newStream(effectExpr); @@ -565,7 +573,11 @@ export class CoreEnforcer { * @return whether to allow the request. */ public enforceSync(...rvals: any[]): boolean { - return generatorRunSync(this.privateEnforce(false, false, ...rvals)); + if (rvals[0] instanceof EnforceContext) { + const enforceContext: EnforceContext = rvals.shift(); + return generatorRunSync(this.privateEnforce(false, false, enforceContext, ...rvals)); + } + return generatorRunSync(this.privateEnforce(false, false, this.defaultEnforceContext, ...rvals)); } /** @@ -579,7 +591,11 @@ export class CoreEnforcer { * @return whether to allow the request and the reason rule. */ public enforceExSync(...rvals: any[]): [boolean, string[]] { - return generatorRunSync(this.privateEnforce(false, true, ...rvals)); + if (rvals[0] instanceof EnforceContext) { + const enforceContext: EnforceContext = rvals.shift(); + return generatorRunSync(this.privateEnforce(false, true, enforceContext, ...rvals)); + } + return generatorRunSync(this.privateEnforce(false, true, this.defaultEnforceContext, ...rvals)); } /** @@ -598,7 +614,11 @@ export class CoreEnforcer { * @return whether to allow the request. */ public async enforce(...rvals: any[]): Promise { - return generatorRunAsync(this.privateEnforce(true, false, ...rvals)); + if (rvals[0] instanceof EnforceContext) { + const enforceContext: EnforceContext = rvals.shift(); + return generatorRunAsync(this.privateEnforce(true, false, enforceContext, ...rvals)); + } + return generatorRunAsync(this.privateEnforce(true, false, this.defaultEnforceContext, ...rvals)); } /** @@ -610,6 +630,10 @@ export class CoreEnforcer { * @return whether to allow the request and the reason rule. */ public async enforceEx(...rvals: any[]): Promise<[boolean, string[]]> { - return generatorRunAsync(this.privateEnforce(true, true, ...rvals)); + if (rvals[0] instanceof EnforceContext) { + const enforceContext: EnforceContext = rvals.shift(); + return generatorRunAsync(this.privateEnforce(true, true, enforceContext, ...rvals)); + } + return generatorRunAsync(this.privateEnforce(true, true, this.defaultEnforceContext, ...rvals)); } } diff --git a/src/enforceContext.ts b/src/enforceContext.ts new file mode 100644 index 00000000..d235676e --- /dev/null +++ b/src/enforceContext.ts @@ -0,0 +1,20 @@ +import { newEnforcer } from './enforcer'; + +export class EnforceContext { + public pType: string; + public rType: string; + public eType: string; + public mType: string; + + constructor(rType: string, pType: string, eType: string, mType: string) { + this.pType = pType; + this.eType = eType; + this.mType = mType; + this.rType = rType; + } +} +export class NewEnforceContext { + constructor(index: string) { + return new EnforceContext('r' + index, 'p' + index, 'e' + index, 'm' + index); + } +} diff --git a/src/index.ts b/src/index.ts index e451f21f..d0e2c899 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,4 +23,5 @@ export * from './model'; export * from './persist'; export * from './rbac'; export * from './log'; +export { EnforceContext } from './enforceContext'; export { Util }; diff --git a/src/util/util.ts b/src/util/util.ts index 6f00afd7..94f681e9 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -18,9 +18,9 @@ import { RoleManager } from '../rbac'; function escapeAssertion(s: string): string { - s = s.replace(/r\./g, 'r_'); - s = s.replace(/p\./g, 'p_'); - return s; + return s.replace(/([rp])\.|[0-9]\./g, (match) => { + return match.replace('.', '_'); + }); } // removeComments removes the comments starting with # in the text. diff --git a/test/enforcer.test.ts b/test/enforcer.test.ts index 0b47a030..8ddb16d8 100644 --- a/test/enforcer.test.ts +++ b/test/enforcer.test.ts @@ -14,6 +14,7 @@ import { readFileSync } from 'fs'; +import { NewEnforceContext, EnforceContext } from '../src/enforceContext'; import { newModel, newEnforcer, Enforcer, MemoryAdapter, Util } from '../src'; import { getEnforcerWithPath, getStringAdapter } from './utils'; @@ -629,3 +630,70 @@ test('test ABAC multiple eval()', async () => { await testEnforce(e, 23, (67 as unknown) as string, 'read', false); await testEnforce(e, 78, (34 as unknown) as string, 'read', false); }); + +test('TestEnforce Multiple policies config', async () => { + const m = newModel(); + m.addDef('r', 'r2', 'sub, obj, act'); + m.addDef('p', 'p2', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e2', 'some(where (p.eft == allow))'); + m.addDef('m', 'm2', 'g(r2.sub, p2.sub) && r2.obj == p2.obj && r2.act == p2.act'); + const a = getStringAdapter('examples/mulitple_policy.csv'); + + const e = await newEnforcer(m, a); + + //const e = await getEnforcerWithPath(m); + const enforceContext = new EnforceContext('r2', 'p2', 'e2', 'm2'); + await expect(e.enforce(enforceContext, 'alice', 'data1', 'read')).resolves.toStrictEqual(true); + await expect(e.enforce(enforceContext, 'bob', 'data2', 'write')).resolves.toStrictEqual(true); +}); +test('new EnforceContext config', async () => { + const m = newModel(); + m.addDef('r', 'r2', 'sub, obj, act'); + m.addDef('p', 'p2', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e2', 'some(where (p.eft == allow))'); + m.addDef('m', 'm2', 'g(r2.sub, p2.sub) && r2.obj == p2.obj && r2.act == p2.act'); + const a = getStringAdapter('examples/mulitple_policy.csv'); + + const e = await newEnforcer(m, a); + + //const e = await getEnforcerWithPath(m); + const enforceContext = new NewEnforceContext('2'); + await expect(e.enforce(enforceContext, 'alice', 'data1', 'read')).resolves.toStrictEqual(true); + await expect(e.enforce(enforceContext, 'bob', 'data2', 'write')).resolves.toStrictEqual(true); +}); + +test('TestEnforceEX Multiple policies config', async () => { + const m = newModel(); + m.addDef('r', 'r2', 'sub, obj, act'); + m.addDef('p', 'p2', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e2', 'some(where (p.eft == allow))'); + m.addDef('m', 'm2', 'g(r2.sub, p2.sub) && r2.obj == p2.obj && r2.act == p2.act'); + const a = getStringAdapter('examples/mulitple_policy.csv'); + + const e = await newEnforcer(m, a); + + //const e = await getEnforcerWithPath(m); + const enforceContext = new EnforceContext('r2', 'p2', 'e2', 'm2'); + await expect(e.enforceEx(enforceContext, 'alice', 'data1', 'read')).resolves.toStrictEqual([true, ['alice', 'data1', 'read']]); + await expect(e.enforceEx(enforceContext, 'bob', 'data2', 'write')).resolves.toStrictEqual([true, ['bob', 'data2', 'write']]); +}); + +test('new EnforceContextEX config', async () => { + const m = newModel(); + m.addDef('r', 'r2', 'sub, obj, act'); + m.addDef('p', 'p2', 'sub, obj, act'); + m.addDef('g', 'g', '_, _'); + m.addDef('e', 'e2', 'some(where (p.eft == allow))'); + m.addDef('m', 'm2', 'g(r2.sub, p2.sub) && r2.obj == p2.obj && r2.act == p2.act'); + const a = getStringAdapter('examples/mulitple_policy.csv'); + + const e = await newEnforcer(m, a); + + //const e = await getEnforcerWithPath(m); + const enforceContext = new NewEnforceContext('2'); + await expect(e.enforceEx(enforceContext, 'alice', 'data1', 'read')).resolves.toStrictEqual([true, ['alice', 'data1', 'read']]); + await expect(e.enforceEx(enforceContext, 'bob', 'data2', 'write')).resolves.toStrictEqual([true, ['bob', 'data2', 'write']]); +}); From 72a658b43c7037b4e7ae4c956168c578e535d17c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 28 Aug 2021 14:52:15 +0000 Subject: [PATCH 484/497] chore(release): 1.0.0-beta.3 [skip ci] # [1.0.0-beta.3](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2021-08-28) ### Features * Multiple sections type ([2635601](https://github.com/casbin/casbin.js/commit/2635601ab1b1dd8d613bbb6b62d52f1cb86400f6)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 597be012..88974b76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.3](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2021-08-28) + + +### Features + +* Multiple sections type ([2635601](https://github.com/casbin/casbin.js/commit/2635601ab1b1dd8d613bbb6b62d52f1cb86400f6)) + # [1.0.0-beta.2](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2021-08-22) diff --git a/package.json b/package.json index da71a716..be3db6d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.3", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 4a8cc106862bee79fb1533338bde16669d40f5f5 Mon Sep 17 00:00:00 2001 From: Gabriel-403 <50576424+Gabriel-403@users.noreply.github.com> Date: Tue, 31 Aug 2021 17:33:20 +0800 Subject: [PATCH 485/497] feat: Extend multiple sections type of escapeAssertion (#180) * feat: Extend multiple sections type of escapeAssertion Signed-off-by: Gabriel-403 <1499015923@qq.com> * feat: add r2.value == p4.value and r1.value == p1.value type Signed-off-by: Gabriel-403 <1499015923@qq.com> --- src/util/util.ts | 5 ++++- test/util.test.ts | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/util/util.ts b/src/util/util.ts index 94f681e9..266c46b3 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -18,7 +18,10 @@ import { RoleManager } from '../rbac'; function escapeAssertion(s: string): string { - return s.replace(/([rp])\.|[0-9]\./g, (match) => { + if (s.startsWith('r') || s.startsWith('p')) { + s = s.replace('.', '_'); + } + return s.replace(/([| =)(&<>,+\-!*\/])([rp][0-9]*)\./g, (match) => { return match.replace('.', '_'); }); } diff --git a/test/util.test.ts b/test/util.test.ts index 36185693..129e2f9f 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -190,3 +190,21 @@ test('test keyGet2Func', () => { expect(util.keyGet2Func('/baz', '/foo', 'bar')).toEqual(''); expect(util.keyGet2Func('/foo/baz', '/foo', 'bar')).toEqual(''); }); + +test('test escapeAssertion', () => { + expect(util.escapeAssertion('r.attr.value == p.attr')).toEqual('r_attr.value == p_attr'); + expect(util.escapeAssertion('r.attp.value || p.attr')).toEqual('r_attp.value || p_attr'); + expect(util.escapeAssertion('r.attp.value && p.attr')).toEqual('r_attp.value && p_attr'); + expect(util.escapeAssertion('r.attp.value >p.attr')).toEqual('r_attp.value >p_attr'); + expect(util.escapeAssertion('r.attp.value Date: Tue, 31 Aug 2021 09:35:36 +0000 Subject: [PATCH 486/497] chore(release): 1.0.0-beta.4 [skip ci] # [1.0.0-beta.4](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2021-08-31) ### Features * Extend multiple sections type of escapeAssertion ([#180](https://github.com/casbin/casbin.js/issues/180)) ([4a8cc10](https://github.com/casbin/casbin.js/commit/4a8cc106862bee79fb1533338bde16669d40f5f5)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88974b76..9299a975 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.4](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2021-08-31) + + +### Features + +* Extend multiple sections type of escapeAssertion ([#180](https://github.com/casbin/casbin.js/issues/180)) ([4a8cc10](https://github.com/casbin/casbin.js/commit/4a8cc106862bee79fb1533338bde16669d40f5f5)) + # [1.0.0-beta.3](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2021-08-28) diff --git a/package.json b/package.json index be3db6d1..859ba44e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "1.0.0-beta.3", + "version": "1.0.0-beta.4", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From 5e49b41a2988a20e324715377e0c8302c9e9c3aa Mon Sep 17 00:00:00 2001 From: Gabriel-403 <1499015923@qq.com> Date: Wed, 29 Sep 2021 00:43:05 +0800 Subject: [PATCH 487/497] feat: RBAC with Domains API Signed-off-by: Gabriel-403 <1499015923@qq.com> --- src/enforcer.ts | 48 ++++++++++++++++++++++++++++++++++++++++++++ test/rbacAPI.test.ts | 21 +++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/src/enforcer.ts b/src/enforcer.ts index 734ef66f..65750578 100644 --- a/src/enforcer.ts +++ b/src/enforcer.ts @@ -144,6 +144,19 @@ export class Enforcer extends ManagementEnforcer { } } + /** + * addRoleForUserInDomain adds a role for a user. + * Returns false if the user already has the role (aka not affected). + * + * @param user the user. + * @param role the role. + * @param domain the domain. + * @return succeeds or not. + */ + public async addRoleForUserInDomain(user: string, role: string, domain: string): Promise { + return this.addGroupingPolicy(user, role, domain); + } + /** * deleteRoleForUser deletes a role for a user. * Returns false if the user does not have the role (aka not affected). @@ -160,6 +173,18 @@ export class Enforcer extends ManagementEnforcer { return this.removeGroupingPolicy(user, role, domain); } } + /** + * deleteRoleForUserInDomain deletes a role for a user. + * Returns false if the user does not have the role (aka not affected). + * + * @param user the user. + * @param role the role. + * @param domain the domain. + * @return succeeds or not. + */ + public async deleteRoleForUserInDomain(user: string, role: string, domain?: string): Promise { + return this.deleteRoleForUser(user, role, domain); + } /** * deleteRolesForUser deletes all roles for a user. @@ -177,6 +202,18 @@ export class Enforcer extends ManagementEnforcer { } } + /** + * deleteRolesForUserInDomain deletes all roles for a user. + * Returns false if the user does not have any roles (aka not affected). + * + * @param user the user. + * @param domain the domain. + * @return succeeds or not. + */ + public async deleteRolesForUserInDomain(user: string, domain?: string): Promise { + return this.deleteRolesForUser(user, domain); + } + /** * deleteUser deletes a user. * Returns false if the user does not exist (aka not affected). @@ -313,6 +350,7 @@ export class Enforcer extends ManagementEnforcer { * getPermissionsForUser("alice") can only get: [["alice", "data2", "read"]]. * But getImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]]. */ + public async getImplicitPermissionsForUser(user: string, ...domain: string[]): Promise { const roles = await this.getImplicitRolesForUser(user, ...domain); roles.unshift(user); @@ -332,6 +370,16 @@ export class Enforcer extends ManagementEnforcer { return res; } + /** + * getPermissionsForUserInDomain gets implicit permissions for a user or role. + * Compared to getPermissionsForUser(), this function retrieves permissions for inherited roles. + */ + + public async getPermissionsForUserInDomain(user: string, domain: string): Promise { + const res = await this.getImplicitPermissionsForUser(user, domain); + return res; + } + /** * getImplicitUsersForPermission gets implicit users for a permission. * For example: diff --git a/test/rbacAPI.test.ts b/test/rbacAPI.test.ts index b15a205e..4a4c6b4a 100644 --- a/test/rbacAPI.test.ts +++ b/test/rbacAPI.test.ts @@ -174,3 +174,24 @@ test('test getImplicitUsersForPermission', async () => { expect(await e.getImplicitUsersForPermission('data1', 'read')).toEqual(['bob', 'alice']); }); + +test('test getPermissionsForUserInDomain', async () => { + const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv'); + expect(await e.getPermissionsForUserInDomain('alice', 'domain1')).toEqual([ + ['admin', 'domain1', 'data1', 'read'], + ['admin', 'domain1', 'data1', 'write'], + ]); + expect(await e.getPermissionsForUserInDomain('bob', 'domain2')).toEqual([ + ['admin', 'domain2', 'data2', 'read'], + ['admin', 'domain2', 'data2', 'write'], + ]); +}); +test('test add/deleteRoleForUserInDomain', async () => { + const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv'); + expect(await e.addRoleForUserInDomain('bob', 'role:global_admin', 'domain1')).toEqual(true); + expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true); + expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice', 'bob']); + expect(await e.deleteRoleForUserInDomain('bob', 'role:global_admin', 'domain1')).toEqual(true); + expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(false); + expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice']); +}); From 23b069f056f7be914844a5398c59ef41a8796531 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 29 Sep 2021 13:03:36 +0000 Subject: [PATCH 488/497] chore(release): 1.0.0-beta.5 [skip ci] # [1.0.0-beta.5](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2021-09-29) ### Features * RBAC with Domains API ([5e49b41](https://github.com/casbin/casbin.js/commit/5e49b41a2988a20e324715377e0c8302c9e9c3aa)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9299a975..4c1b7f36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.5](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2021-09-29) + + +### Features + +* RBAC with Domains API ([5e49b41](https://github.com/casbin/casbin.js/commit/5e49b41a2988a20e324715377e0c8302c9e9c3aa)) + # [1.0.0-beta.4](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2021-08-31) diff --git a/package.json b/package.json index 859ba44e..62258ab4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "1.0.0-beta.4", + "version": "1.0.0-beta.5", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/cjs/index.js", "typings": "lib/cjs/index.d.ts", From dea6c17ca236c1766cf914eb43e99cd7af42df5d Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Tue, 5 Oct 2021 20:57:09 +0800 Subject: [PATCH 489/497] build: output ESM and UMD Signed-off-by: Zixuan Liu --- .github/workflows/main.yml | 1 + .gitignore | 5 +- package.json | 46 ++++--- rollup.config.js | 38 ++++++ tsconfig.cjs.json | 2 +- tsconfig.esm.json | 2 +- tsconfig.json | 3 +- yarn.lock | 267 ++++++++++++++++++++++++++++++++++--- 8 files changed, 325 insertions(+), 39 deletions(-) create mode 100644 rollup.config.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 38017633..99db5495 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,6 +16,7 @@ jobs: - run: yarn install --ignore-engines - run: yarn lint - run: yarn test + - run: yarn build - run: yarn coverage - name: Coveralls uses: coverallsapp/github-action@master diff --git a/.gitignore b/.gitignore index 2096cdbf..c5620d5d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ .idea .vscode node_modules -lib yarn-error.log package-lock.json coverage + +lib +es +dist diff --git a/package.json b/package.json index 62258ab4..021eb259 100644 --- a/package.json +++ b/package.json @@ -2,24 +2,26 @@ "name": "casbin.js", "version": "1.0.0-beta.5", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", - "main": "lib/cjs/index.js", - "typings": "lib/cjs/index.d.ts", - "module": "lib/esm/index.js", + "main": "lib/index.js", + "typings": "lib/index.d.ts", + "module": "es/index.js", "scripts": { "prepack": "run-s lint test build", "postpack": "run-s clean", - "build": "run-s clean && run-p build:*", - "build:cjs": "tsc -p tsconfig.cjs.json", - "build:esm": "tsc -p tsconfig.esm.json", + "build": "run-s clean && run-p build:**", + "build:lib:cjs": "tsc -p tsconfig.cjs.json", + "build:lib:esm": "tsc -p tsconfig.esm.json", + "build:dist": "rollup -c", "test": "jest", "lint": "eslint . --ext .js,.ts", "fmt": "eslint . --ext .js,.ts --fix", "semantic-release": "semantic-release", "commit": "git-cz", - "clean": "rimraf lib", + "clean": "rimraf lib es dist", "coverage": "jest --coverage" }, "devDependencies": { + "@rollup/plugin-typescript": "^8.2.5", "@semantic-release/changelog": "^5.0.1", "@semantic-release/commit-analyzer": "^8.0.1", "@semantic-release/git": "^9.0.0", @@ -28,8 +30,8 @@ "@semantic-release/release-notes-generator": "^9.0.2", "@types/jest": "^26.0.20", "@types/lodash": "^4.14.168", - "@types/picomatch": "^2.2.2", "@types/node": "^10.5.3", + "@types/picomatch": "^2.2.2", "@typescript-eslint/eslint-plugin": "^4.17.0", "@typescript-eslint/parser": "^4.17.0", "coveralls": "^3.0.2", @@ -44,25 +46,30 @@ "prettier": "^2.2.1", "pretty-quick": "^3.1.0", "rimraf": "^3.0.2", + "rollup": "^2.58.0", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.30.0", "semantic-release": "^17.4.2", "ts-jest": "^26.5.3", "tslint": "^5.11.0", - "typescript": "^4.3.5", - "picomatch": "^2.2.3", - "csv-parse": "^4.15.3", - "buffer": "^6.0.3" - }, - "peerDependencies": { - "picomatch": "^2.2.3", - "buffer": "^6.0.3" + "typescript": "^4.3.5" }, + "peerDependencies": {}, "dependencies": { "await-lock": "^2.0.1", - "expression-eval": "^4.0.0" + "buffer": "^6.0.3", + "expression-eval": "^4.0.0", + "path-browserify": "^1.0.1", + "picomatch": "^2.3.0" }, "files": [ "lib", - "examples" + "examples", + "es", + "dist" ], "homepage": "https://casbin.org", "repository": { @@ -84,5 +91,8 @@ "publishConfig": { "registry": "https://registry.npmjs.org/", "tag": "next" + }, + "browser": { + "path": "path-browserify" } } diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..fa2cd9e2 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,38 @@ +import typescript from '@rollup/plugin-typescript'; +import sourceMaps from 'rollup-plugin-sourcemaps'; +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; +import { terser } from 'rollup-plugin-terser'; + +export default { + input: 'src/index.ts', + plugins: [ + commonjs(), + resolve({ + preferBuiltins: false, + }), + typescript({ + tsconfig: 'tsconfig.esm.json', + }), + sourceMaps(), + terser(), + ], + output: [ + { + format: 'umd', + file: 'dist/casbin.js', + name: 'casbin', + sourcemap: true, + }, + { + format: 'es', + file: 'dist/casbin.mjs', + sourcemap: true, + }, + { + format: 'es', + file: 'dist/casbin.esm.js', + sourcemap: true, + }, + ], +}; diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json index 55d0a60d..a20da827 100644 --- a/tsconfig.cjs.json +++ b/tsconfig.cjs.json @@ -3,6 +3,6 @@ "compilerOptions": { "target": "ES2017", "module": "CommonJS", - "outDir": "lib/cjs" + "outDir": "lib" } } diff --git a/tsconfig.esm.json b/tsconfig.esm.json index 1ce8fca4..955e3bf5 100644 --- a/tsconfig.esm.json +++ b/tsconfig.esm.json @@ -3,6 +3,6 @@ "compilerOptions": { "target": "ES2017", "module": "ESNext", - "outDir": "lib/esm" + "outDir": "es" } } diff --git a/tsconfig.json b/tsconfig.json index 1a142d25..358d51cc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,8 +8,7 @@ "declaration": true, "downlevelIteration": true, "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "rootDir": "./src" + "esModuleInterop": true }, "include": ["src/**/*"] } diff --git a/yarn.lock b/yarn.lock index c541fa0c..7199201c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,6 +16,13 @@ dependencies: "@babel/highlight" "^7.12.13" +"@babel/code-frame@^7.10.4": + version "7.14.5" + resolved "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz?cache=0&sync_timestamp=1623280639364&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts= + dependencies: + "@babel/highlight" "^7.14.5" + "@babel/compat-data@^7.13.15": version "7.14.0" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" @@ -146,6 +153,11 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== +"@babel/helper-validator-identifier@^7.14.5": + version "7.15.7" + resolved "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k= + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" @@ -169,6 +181,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz?cache=0&sync_timestamp=1623280657819&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk= + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.0": version "7.14.0" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz#2f0ebfed92bcddcc8395b91f1895191ce2760380" @@ -801,6 +822,31 @@ dependencies: "@octokit/openapi-types" "^7.0.0" +"@rollup/plugin-typescript@^8.2.5": + version "8.2.5" + resolved "https://registry.nlark.com/@rollup/plugin-typescript/download/@rollup/plugin-typescript-8.2.5.tgz#e0319761b2b5105615e5a0c371ae05bc2984b7de" + integrity sha1-4DGXYbK1EFYV5aDDca4FvCmEt94= + dependencies: + "@rollup/pluginutils" "^3.1.0" + resolve "^1.17.0" + +"@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.nlark.com/@rollup/pluginutils/download/@rollup/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha1-cGtFJO5tyLEDs8mVUz5a1oDAK5s= + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^4.1.0": + version "4.1.1" + resolved "https://registry.nlark.com/@rollup/pluginutils/download/@rollup/pluginutils-4.1.1.tgz#1d4da86dd4eded15656a57d933fda2b9a08d47ec" + integrity sha1-HU2obdTt7RVlalfZM/2iuaCNR+w= + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" @@ -959,6 +1005,16 @@ dependencies: "@babel/types" "^7.3.0" +"@types/estree@*": + version "0.0.50" + resolved "https://registry.nlark.com/@types/estree/download/@types/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM= + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.nlark.com/@types/estree/download/@types/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha1-4Xfmme4bjCLSMXTKqnQiZEOJUJ8= + "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -1043,6 +1099,13 @@ resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.nlark.com/@types/resolve/download/@types/resolve-0.0.8.tgz?cache=0&sync_timestamp=1629709391127&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fresolve%2Fdownload%2F%40types%2Fresolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha1-8mB00jjgJlnjI84aE9BB7uKA4ZQ= + dependencies: + "@types/node" "*" + "@types/retry@^0.12.0": version "0.12.0" resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -1306,8 +1369,8 @@ anymatch@^2.0.0: anymatch@^3.0.3: version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747502795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha1-wFV8CWrzLxBhmPT04qODU343hxY= dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1658,6 +1721,11 @@ builtin-modules@^1.1.1: resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.nlark.com/builtin-modules/download/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha1-RdXbmefuXmvE82LgCL+RerUEmIc= + builtins@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -2022,7 +2090,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: +commander@^2.12.1, commander@^2.14.1, commander@^2.20.0, commander@^2.9.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2052,6 +2120,11 @@ common-ancestor-path@^1.0.1: resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + compare-func@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" @@ -2216,11 +2289,6 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csv-parse@^4.15.3: - version "4.15.4" - resolved "https://registry.npmjs.org/csv-parse/-/csv-parse-4.15.4.tgz#ad1ec62aaf71a642982dfcb81f1848184d691db5" - integrity sha512-OdBbFc0yZhOm17lSxqkirrHlFFVpKRT0wp4DAGoJelsP3LbGzV9LNr7XmM/lrr0uGkCtaqac9UhP8PDHXOAbMg== - cz-conventional-changelog@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477" @@ -2751,6 +2819,21 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/estree-walker/download/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha1-UwSRQ/QMbrkYsjZx0f4yGfOhs2I= + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/estree-walker/download/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha1-MbxdYSyWtwQQa0d+bdXYqhOMtwA= + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/estree-walker/download/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw= + esutils@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2993,6 +3076,15 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks= + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-node-modules@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" @@ -3128,10 +3220,10 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.1.2: +fsevents@^2.1.2, fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= function-bind@^1.1.1: version "1.1.1" @@ -3879,6 +3971,11 @@ is-lambda@^1.0.1: resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-module/download/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" @@ -3974,6 +4071,13 @@ is-promise@^2.1.0: resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== +is-reference@^1.1.2: + version "1.2.1" + resolved "https://registry.nlark.com/is-reference/download/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha1-iy2sCzcfS8mU/eq6nrVC0DAC0Lc= + dependencies: + "@types/estree" "*" + is-regex@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" @@ -4477,7 +4581,7 @@ jest-watcher@^26.6.2: jest-util "^26.6.2" string-length "^4.0.1" -jest-worker@^26.6.2: +jest-worker@^26.2.1, jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -5020,7 +5124,14 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^3.0.0: +magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE= + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -5993,6 +6104,11 @@ pascalcase@^0.1.1: resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/path-browserify/download/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha1-2YRUqcN1PVeQhg8W9ohnueRr4f0= + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -6050,6 +6166,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== +picomatch@^2.2.2, picomatch@^2.3.0: + version "2.3.0" + resolved "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz?cache=0&sync_timestamp=1621648305056&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpicomatch%2Fdownload%2Fpicomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI= + pidtree@^0.3.0: version "0.3.1" resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" @@ -6256,6 +6377,13 @@ quick-lru@^4.0.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo= + dependencies: + safe-buffer "^5.1.0" + rc@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -6515,7 +6643,7 @@ resolve-url@^0.2.1: resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2: +resolve@1.20.0, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2: version "1.20.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -6560,6 +6688,71 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rollup-plugin-commonjs@^10.1.0: + version "10.1.0" + resolved "https://registry.npm.taobao.org/rollup-plugin-commonjs/download/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" + integrity sha1-QXrztUUDh44ITRJ6300cr4vrhvs= + dependencies: + estree-walker "^0.6.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-node-resolve@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/rollup-plugin-node-resolve/download/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" + integrity sha1-cw+T0Q7SAkc7H7VKWZen24xthSM= + dependencies: + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.11.1" + rollup-pluginutils "^2.8.1" + +rollup-plugin-sourcemaps@^0.6.3: + version "0.6.3" + resolved "https://registry.npm.taobao.org/rollup-plugin-sourcemaps/download/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" + integrity sha1-v5ORP/4FbkFEGWB/HQJ4DX7OhO0= + dependencies: + "@rollup/pluginutils" "^3.0.9" + source-map-resolve "^0.6.0" + +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.npm.taobao.org/rollup-plugin-terser/download/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha1-6Pu6SGmYGy3DWufopQLVxsBNMk0= + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-plugin-typescript2@^0.30.0: + version "0.30.0" + resolved "https://registry.npm.taobao.org/rollup-plugin-typescript2/download/rollup-plugin-typescript2-0.30.0.tgz#1cc99ac2309bf4b9d0a3ebdbc2002aecd56083d3" + integrity sha1-HMmawjCb9LnQo+vbwgAq7NVgg9M= + dependencies: + "@rollup/pluginutils" "^4.1.0" + find-cache-dir "^3.3.1" + fs-extra "8.1.0" + resolve "1.20.0" + tslib "2.1.0" + +rollup-pluginutils@^2.8.1: + version "2.8.2" + resolved "https://registry.npm.taobao.org/rollup-pluginutils/download/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha1-cvKvB0i1kjZNvTOJ5gDlqURKNR4= + dependencies: + estree-walker "^0.6.1" + +rollup@^2.58.0: + version "2.58.0" + resolved "https://registry.npmmirror.com/rollup/download/rollup-2.58.0.tgz#a643983365e7bf7f5b7c62a8331b983b7c4c67fb" + integrity sha1-pkOYM2Xnv39bfGKoMxuYO3xMZ/s= + optionalDependencies: + fsevents "~2.3.2" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -6589,7 +6782,7 @@ rxjs@^6.3.3, rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6701,6 +6894,13 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/serialize-javascript/download/serialize-javascript-4.0.0.tgz?cache=0&sync_timestamp=1624284098038&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao= + dependencies: + randombytes "^2.1.0" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -6858,6 +7058,14 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha1-PZ34fiNrU/FtAeWBUPx3EROOXtI= + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + source-map-support@^0.5.6: version "0.5.19" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -6866,6 +7074,14 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.20: + version "0.5.20" + resolved "https://registry.nlark.com/source-map-support/download/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha1-EhZgifj15ejFaSazd2Mzkt0stsk= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.1" resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" @@ -6881,11 +7097,16 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.nlark.com/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= + spawn-error-forwarder@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" @@ -7258,6 +7479,15 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" +terser@^5.0.0: + version "5.9.0" + resolved "https://registry.nlark.com/terser/download/terser-5.9.0.tgz?cache=0&sync_timestamp=1632229770103&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser%2Fdownload%2Fterser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" + integrity sha1-R9bmKaUiljJA8rVfyqPJkIPSw1E= + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -7421,6 +7651,11 @@ ts-jest@^26.5.3: semver "7.x" yargs-parser "20.x" +tslib@2.1.0: + version "2.1.0" + resolved "https://registry.nlark.com/tslib/download/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo= + tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" From b2369ef7d3c79e972c61a208730ab6d8b1262210 Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Fri, 29 Oct 2021 23:33:28 +0800 Subject: [PATCH 490/497] ci: remove v1 branch limit Signed-off-by: Zixuan Liu --- .github/workflows/main.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 99db5495..c80433cf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,8 +41,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Run semantic-release - # only allowed in V1 branch. - if: github.repository == 'casbin/casbin.js' && github.event_name == 'push' && github.ref == 'refs/heads/v1' + if: github.repository == 'casbin/casbin.js' && github.event_name == 'push' run: yarn install && yarn semantic-release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From e607a30b15cf1aaf5ccd8ccedbd8e649ee770801 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 30 Oct 2021 10:19:30 +0000 Subject: [PATCH 491/497] chore(release): 1.0.0 [skip ci] # 1.0.0 (2021-10-30) ### Bug Fixes * `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/casbin.js/issues/272)) ([0d59239](https://github.com/casbin/casbin.js/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) * add cache to generateGFunction ([e90bed2](https://github.com/casbin/casbin.js/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) * add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/casbin.js/commit/b85673432f8a150490fd5134797508ccd368b81f)) * add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/casbin.js/commit/a415838a514706af8a9399c899959bdb069619d4)) * add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/casbin.js/commit/6e144fb9a895332245006ef3a28c47d022654895)) * Add examples. ([5cf950a](https://github.com/casbin/casbin.js/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) * Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/casbin.js/commit/3804c3d76802614104016a011c07c11c54a94632)) * add missing await ([523ce85](https://github.com/casbin/casbin.js/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) * Add tests for batch operations. ([e6ad7af](https://github.com/casbin/casbin.js/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) * Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/casbin.js/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) * Added util functions and util tests. ([72918bc](https://github.com/casbin/casbin.js/commit/72918bc677e898251dd4375516c31254e79eb6b8)) * check adapter type ([a74314d](https://github.com/casbin/casbin.js/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) * compatible types ([58242a5](https://github.com/casbin/casbin.js/commit/58242a56f9f72b1a06e4901867f502b73674d640)) * downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/casbin.js/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) * downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/casbin.js/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) * fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/casbin.js/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) * fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/casbin.js/issues/251)) ([98c11f1](https://github.com/casbin/casbin.js/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) * fix errror type ([dc9e5b5](https://github.com/casbin/casbin.js/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) * fix logic error and add unittests ([82124e3](https://github.com/casbin/casbin.js/commit/82124e3dccfbee9a2a9b75606ff1d4d2c4c03202)) * fix ts4 build configuration ([a5034c8](https://github.com/casbin/casbin.js/commit/a5034c889c38a45010241a41173ed4f6ed8ce34f)) * fix unexpected parser action ([3074fa9](https://github.com/casbin/casbin.js/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) * getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/casbin.js/commit/584624c99eabca68fc790d66fc4737511d92b074)) * ignore print model ([f426131](https://github.com/casbin/casbin.js/commit/f426131e752143251db6c11a7352d91d959cb503)) * improve load policy line ([9f12511](https://github.com/casbin/casbin.js/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) * improve tokens separator ([687e96f](https://github.com/casbin/casbin.js/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) * improve update into adapter before model ([0e9ccc6](https://github.com/casbin/casbin.js/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) * Merge conflicts. ([7179b17](https://github.com/casbin/casbin.js/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) * remove lodash ([293a852](https://github.com/casbin/casbin.js/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) * remove unused import ([2f8801c](https://github.com/casbin/casbin.js/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) * remove use spread operator with await in array ([6e4f876](https://github.com/casbin/casbin.js/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) * rename StringAdapter to MemoryAdapter ([aa92d40](https://github.com/casbin/casbin.js/commit/aa92d40851d605d482b2a32841120bd30baff9eb)) * stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/casbin.js/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) * support comments after expression ([c97cb26](https://github.com/casbin/casbin.js/commit/c97cb26441d79316960a0464e8d56918859d969c)) * Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/casbin.js/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) * support pattern function in 3rd args of g ([#199](https://github.com/casbin/casbin.js/issues/199)) ([27005f8](https://github.com/casbin/casbin.js/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) * tests. ([4da5291](https://github.com/casbin/casbin.js/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) * transfer from micromatch to picomatch ([#264](https://github.com/casbin/casbin.js/issues/264)) ([6be1b06](https://github.com/casbin/casbin.js/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) * update expression-eval ([95de296](https://github.com/casbin/casbin.js/commit/95de29650251af781d8638011dcc5cabeef2784c)) * use csv-like format ([32ec20d](https://github.com/casbin/casbin.js/commit/32ec20d07ff1c0f21c910a450398d7163ca1d1be)) * **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/casbin.js/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/casbin.js/issues/214) * **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/casbin.js/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/casbin.js/issues/118) * **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/casbin.js/issues/211)) ([4f3ba65](https://github.com/casbin/casbin.js/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) * update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/casbin.js/issues/186)) ([6c277e8](https://github.com/casbin/casbin.js/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) ### Features * add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/casbin.js/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) * add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/casbin.js/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) * add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/casbin.js/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) * add enforceEx() ([#271](https://github.com/casbin/casbin.js/issues/271)) ([762efd9](https://github.com/casbin/casbin.js/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) * add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/casbin.js/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) * add glob pattern to built-in function ([8415fc2](https://github.com/casbin/casbin.js/commit/8415fc2648796d033c85771e27219bd32541982e)) * add initRmMap ([87f8011](https://github.com/casbin/casbin.js/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) * Add lazyload option at enforcer init method ([#289](https://github.com/casbin/casbin.js/issues/289)) ([e858dcb](https://github.com/casbin/casbin.js/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) * add named addMatchingFunc ([65d3a26](https://github.com/casbin/casbin.js/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) * add policyArrayToString and policyStringToArray to util ([e71b40f](https://github.com/casbin/casbin.js/commit/e71b40fc1917f1f8bd4f64d24372f6044c052102)) * add priority_policy_explicit support ([#250](https://github.com/casbin/casbin.js/issues/250)) ([763c18e](https://github.com/casbin/casbin.js/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) * add support for `in` operator ([a44c6a9](https://github.com/casbin/casbin.js/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) * add sync mode ([70e4e12](https://github.com/casbin/casbin.js/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) * add unittest ([3cd5b73](https://github.com/casbin/casbin.js/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) * add updatePolicy() ([#234](https://github.com/casbin/casbin.js/issues/234)) ([a3218f1](https://github.com/casbin/casbin.js/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/casbin.js/issues/235) * avoid miss initialize() ([1394e8d](https://github.com/casbin/casbin.js/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) * changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/casbin.js/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) * controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/casbin.js/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) * enforceSync ([ff41f0a](https://github.com/casbin/casbin.js/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) * Extend multiple sections type of escapeAssertion ([#180](https://github.com/casbin/casbin.js/issues/180)) ([4a8cc10](https://github.com/casbin/casbin.js/commit/4a8cc106862bee79fb1533338bde16669d40f5f5)) * implement csv parser ([f2ddaab](https://github.com/casbin/casbin.js/commit/f2ddaab9223cd83d21978c473525b469cd419a4b)) * implement string adapater ([fabd784](https://github.com/casbin/casbin.js/commit/fabd784ff5f2c2dbb0e1ddc3867b18adeb423da8)) * implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/casbin.js/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) * improve effector for improve performance ([57de7b2](https://github.com/casbin/casbin.js/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) * Multiple sections type ([2635601](https://github.com/casbin/casbin.js/commit/2635601ab1b1dd8d613bbb6b62d52f1cb86400f6)) * RBAC with Domains API ([5e49b41](https://github.com/casbin/casbin.js/commit/5e49b41a2988a20e324715377e0c8302c9e9c3aa)) * support RBAC for syncedEnforcer ([#150](https://github.com/casbin/casbin.js/issues/150)) ([2bf4299](https://github.com/casbin/casbin.js/commit/2bf42996d035eaa4dd659d781f2ce6b89fc396df)) * sync with upstream ([ca4b572](https://github.com/casbin/casbin.js/commit/ca4b57268f0cfe362a46237d583fd907578423d0)) * synchronized enforcer ([ecec514](https://github.com/casbin/casbin.js/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) * use new license format ([284d2a4](https://github.com/casbin/casbin.js/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) ### improvement * convert all management_api to async function ([e9f4d38](https://github.com/casbin/casbin.js/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) ### BREAKING CHANGES * **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] * - provides a new interface for Effector * see # --- CHANGELOG.md | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c1b7f36..de3b7783 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,98 @@ +# 1.0.0 (2021-10-30) + + +### Bug Fixes + +* `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/casbin.js/issues/272)) ([0d59239](https://github.com/casbin/casbin.js/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) +* add cache to generateGFunction ([e90bed2](https://github.com/casbin/casbin.js/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) +* add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/casbin.js/commit/b85673432f8a150490fd5134797508ccd368b81f)) +* add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/casbin.js/commit/a415838a514706af8a9399c899959bdb069619d4)) +* add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/casbin.js/commit/6e144fb9a895332245006ef3a28c47d022654895)) +* Add examples. ([5cf950a](https://github.com/casbin/casbin.js/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) +* Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/casbin.js/commit/3804c3d76802614104016a011c07c11c54a94632)) +* add missing await ([523ce85](https://github.com/casbin/casbin.js/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) +* Add tests for batch operations. ([e6ad7af](https://github.com/casbin/casbin.js/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) +* Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/casbin.js/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) +* Added util functions and util tests. ([72918bc](https://github.com/casbin/casbin.js/commit/72918bc677e898251dd4375516c31254e79eb6b8)) +* check adapter type ([a74314d](https://github.com/casbin/casbin.js/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) +* compatible types ([58242a5](https://github.com/casbin/casbin.js/commit/58242a56f9f72b1a06e4901867f502b73674d640)) +* downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/casbin.js/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) +* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/casbin.js/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) +* fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/casbin.js/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) +* fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/casbin.js/issues/251)) ([98c11f1](https://github.com/casbin/casbin.js/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) +* fix errror type ([dc9e5b5](https://github.com/casbin/casbin.js/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) +* fix logic error and add unittests ([82124e3](https://github.com/casbin/casbin.js/commit/82124e3dccfbee9a2a9b75606ff1d4d2c4c03202)) +* fix ts4 build configuration ([a5034c8](https://github.com/casbin/casbin.js/commit/a5034c889c38a45010241a41173ed4f6ed8ce34f)) +* fix unexpected parser action ([3074fa9](https://github.com/casbin/casbin.js/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) +* getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/casbin.js/commit/584624c99eabca68fc790d66fc4737511d92b074)) +* ignore print model ([f426131](https://github.com/casbin/casbin.js/commit/f426131e752143251db6c11a7352d91d959cb503)) +* improve load policy line ([9f12511](https://github.com/casbin/casbin.js/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) +* improve tokens separator ([687e96f](https://github.com/casbin/casbin.js/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) +* improve update into adapter before model ([0e9ccc6](https://github.com/casbin/casbin.js/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) +* Merge conflicts. ([7179b17](https://github.com/casbin/casbin.js/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) +* remove lodash ([293a852](https://github.com/casbin/casbin.js/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) +* remove unused import ([2f8801c](https://github.com/casbin/casbin.js/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) +* remove use spread operator with await in array ([6e4f876](https://github.com/casbin/casbin.js/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) +* rename StringAdapter to MemoryAdapter ([aa92d40](https://github.com/casbin/casbin.js/commit/aa92d40851d605d482b2a32841120bd30baff9eb)) +* stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/casbin.js/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) +* support comments after expression ([c97cb26](https://github.com/casbin/casbin.js/commit/c97cb26441d79316960a0464e8d56918859d969c)) +* Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/casbin.js/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) +* support pattern function in 3rd args of g ([#199](https://github.com/casbin/casbin.js/issues/199)) ([27005f8](https://github.com/casbin/casbin.js/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) +* tests. ([4da5291](https://github.com/casbin/casbin.js/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) +* transfer from micromatch to picomatch ([#264](https://github.com/casbin/casbin.js/issues/264)) ([6be1b06](https://github.com/casbin/casbin.js/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) +* update expression-eval ([95de296](https://github.com/casbin/casbin.js/commit/95de29650251af781d8638011dcc5cabeef2784c)) +* use csv-like format ([32ec20d](https://github.com/casbin/casbin.js/commit/32ec20d07ff1c0f21c910a450398d7163ca1d1be)) +* **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/casbin.js/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/casbin.js/issues/214) +* **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/casbin.js/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/casbin.js/issues/118) +* **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/casbin.js/issues/211)) ([4f3ba65](https://github.com/casbin/casbin.js/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) +* update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/casbin.js/issues/186)) ([6c277e8](https://github.com/casbin/casbin.js/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) + + +### Features + +* add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/casbin.js/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) +* add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/casbin.js/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) +* add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/casbin.js/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) +* add enforceEx() ([#271](https://github.com/casbin/casbin.js/issues/271)) ([762efd9](https://github.com/casbin/casbin.js/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) +* add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/casbin.js/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) +* add glob pattern to built-in function ([8415fc2](https://github.com/casbin/casbin.js/commit/8415fc2648796d033c85771e27219bd32541982e)) +* add initRmMap ([87f8011](https://github.com/casbin/casbin.js/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) +* Add lazyload option at enforcer init method ([#289](https://github.com/casbin/casbin.js/issues/289)) ([e858dcb](https://github.com/casbin/casbin.js/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) +* add named addMatchingFunc ([65d3a26](https://github.com/casbin/casbin.js/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) +* add policyArrayToString and policyStringToArray to util ([e71b40f](https://github.com/casbin/casbin.js/commit/e71b40fc1917f1f8bd4f64d24372f6044c052102)) +* add priority_policy_explicit support ([#250](https://github.com/casbin/casbin.js/issues/250)) ([763c18e](https://github.com/casbin/casbin.js/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) +* add support for `in` operator ([a44c6a9](https://github.com/casbin/casbin.js/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) +* add sync mode ([70e4e12](https://github.com/casbin/casbin.js/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) +* add unittest ([3cd5b73](https://github.com/casbin/casbin.js/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) +* add updatePolicy() ([#234](https://github.com/casbin/casbin.js/issues/234)) ([a3218f1](https://github.com/casbin/casbin.js/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/casbin.js/issues/235) +* avoid miss initialize() ([1394e8d](https://github.com/casbin/casbin.js/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) +* changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/casbin.js/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) +* controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/casbin.js/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) +* enforceSync ([ff41f0a](https://github.com/casbin/casbin.js/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) +* Extend multiple sections type of escapeAssertion ([#180](https://github.com/casbin/casbin.js/issues/180)) ([4a8cc10](https://github.com/casbin/casbin.js/commit/4a8cc106862bee79fb1533338bde16669d40f5f5)) +* implement csv parser ([f2ddaab](https://github.com/casbin/casbin.js/commit/f2ddaab9223cd83d21978c473525b469cd419a4b)) +* implement string adapater ([fabd784](https://github.com/casbin/casbin.js/commit/fabd784ff5f2c2dbb0e1ddc3867b18adeb423da8)) +* implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/casbin.js/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) +* improve effector for improve performance ([57de7b2](https://github.com/casbin/casbin.js/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) +* Multiple sections type ([2635601](https://github.com/casbin/casbin.js/commit/2635601ab1b1dd8d613bbb6b62d52f1cb86400f6)) +* RBAC with Domains API ([5e49b41](https://github.com/casbin/casbin.js/commit/5e49b41a2988a20e324715377e0c8302c9e9c3aa)) +* support RBAC for syncedEnforcer ([#150](https://github.com/casbin/casbin.js/issues/150)) ([2bf4299](https://github.com/casbin/casbin.js/commit/2bf42996d035eaa4dd659d781f2ce6b89fc396df)) +* sync with upstream ([ca4b572](https://github.com/casbin/casbin.js/commit/ca4b57268f0cfe362a46237d583fd907578423d0)) +* synchronized enforcer ([ecec514](https://github.com/casbin/casbin.js/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) +* use new license format ([284d2a4](https://github.com/casbin/casbin.js/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) + + +### improvement + +* convert all management_api to async function ([e9f4d38](https://github.com/casbin/casbin.js/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) + + +### BREAKING CHANGES + +* **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] +* - provides a new interface for Effector +* see # + # [1.0.0-beta.5](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2021-09-29) diff --git a/package.json b/package.json index 021eb259..71562dba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "1.0.0-beta.5", + "version": "1.0.0", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/index.js", "typings": "lib/index.d.ts", From da52e9b59543076fa29d52328f3a938d2be7e07c Mon Sep 17 00:00:00 2001 From: Zixuan Liu Date: Sat, 30 Oct 2021 18:43:32 +0800 Subject: [PATCH 492/497] fix: update doc and release channel Signed-off-by: Zixuan Liu --- CHANGELOG.md | 90 +--------------------------------------------------- README.md | 4 +-- package.json | 2 +- 3 files changed, 4 insertions(+), 92 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de3b7783..eda4b0d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,97 +1,9 @@ # 1.0.0 (2021-10-30) -### Bug Fixes - -* `getImplicitPermissionsForUser` works with rmMap ([#272](https://github.com/casbin/casbin.js/issues/272)) ([0d59239](https://github.com/casbin/casbin.js/commit/0d5923998fa71648c8f77a23f67ffffac2a09343)) -* add cache to generateGFunction ([e90bed2](https://github.com/casbin/casbin.js/commit/e90bed24f6e6e3cd5b33a433c4fe7a27e494cabe)) -* add casbin-cpp to supported languages. ([b856734](https://github.com/casbin/casbin.js/commit/b85673432f8a150490fd5134797508ccd368b81f)) -* add check if the adapter implements BatchAdapter ([a415838](https://github.com/casbin/casbin.js/commit/a415838a514706af8a9399c899959bdb069619d4)) -* add checks fieldValues to remove filtered policy ([6e144fb](https://github.com/casbin/casbin.js/commit/6e144fb9a895332245006ef3a28c47d022654895)) -* Add examples. ([5cf950a](https://github.com/casbin/casbin.js/commit/5cf950ad25eecfad59281d5ba9d6ddae5cde199e)) -* Add imports and batchFileAdapter implementation. ([3804c3d](https://github.com/casbin/casbin.js/commit/3804c3d76802614104016a011c07c11c54a94632)) -* add missing await ([523ce85](https://github.com/casbin/casbin.js/commit/523ce8508ce45d7e79673bb0b498ed017772815d)) -* Add tests for batch operations. ([e6ad7af](https://github.com/casbin/casbin.js/commit/e6ad7af69344a5bd95b6490f162dba83d10c98fb)) -* Added ABAC policy logic to the private enforcer. ([c6fc487](https://github.com/casbin/casbin.js/commit/c6fc48750313b400fb98e12802b3422bfc1921bf)) -* Added util functions and util tests. ([72918bc](https://github.com/casbin/casbin.js/commit/72918bc677e898251dd4375516c31254e79eb6b8)) -* check adapter type ([a74314d](https://github.com/casbin/casbin.js/commit/a74314d6c4e1e1c8731128e6bfe9e2de1b3f45ce)) -* compatible types ([58242a5](https://github.com/casbin/casbin.js/commit/58242a56f9f72b1a06e4901867f502b73674d640)) -* downgrade expression-eval back to v2.0.0 to avoid semantic-release failure, revert: https://github.com/casbin/node-casbin/pull/222 ([8c0b1fd](https://github.com/casbin/casbin.js/commit/8c0b1fd6b59c39350e90c768c54577396f89fefe)) -* downgrade target from ESNext to ES2017 for building esm ([7dfcf93](https://github.com/casbin/casbin.js/commit/7dfcf93a2eb7a9c9116f55341537a4c81840e3d4)) -* fix buildRoleLinks to isolate groups ([0fb6ae7](https://github.com/casbin/casbin.js/commit/0fb6ae798ef692aaef890472421f980b58a4dfec)) -* fix CasbinJsGetPermissionForUser() ([#251](https://github.com/casbin/casbin.js/issues/251)) ([98c11f1](https://github.com/casbin/casbin.js/commit/98c11f1451e71b0b002b140387f2a38bb9957c38)) -* fix errror type ([dc9e5b5](https://github.com/casbin/casbin.js/commit/dc9e5b5db766d64918a7670f6b3b72f70e84ca28)) -* fix logic error and add unittests ([82124e3](https://github.com/casbin/casbin.js/commit/82124e3dccfbee9a2a9b75606ff1d4d2c4c03202)) -* fix ts4 build configuration ([a5034c8](https://github.com/casbin/casbin.js/commit/a5034c889c38a45010241a41173ed4f6ed8ce34f)) -* fix unexpected parser action ([3074fa9](https://github.com/casbin/casbin.js/commit/3074fa9050ca073eb4c0f4197c63f13e9e7f9ebf)) -* getImplicitPermissionsForUser missing domain parameter ([584624c](https://github.com/casbin/casbin.js/commit/584624c99eabca68fc790d66fc4737511d92b074)) -* ignore print model ([f426131](https://github.com/casbin/casbin.js/commit/f426131e752143251db6c11a7352d91d959cb503)) -* improve load policy line ([9f12511](https://github.com/casbin/casbin.js/commit/9f12511e5fbfb16646b38ad30e345beee5179c9d)) -* improve tokens separator ([687e96f](https://github.com/casbin/casbin.js/commit/687e96f1495de12bc7acd37bf56af57af490b0b6)) -* improve update into adapter before model ([0e9ccc6](https://github.com/casbin/casbin.js/commit/0e9ccc6b2e4387b9130df8af4fa0e23f7e73958b)) -* Merge conflicts. ([7179b17](https://github.com/casbin/casbin.js/commit/7179b17f7733f72fdd1d13ca6a7818415deb6d9c)) -* remove lodash ([293a852](https://github.com/casbin/casbin.js/commit/293a852803d5e83562a36bc35cdf48def0f0088b)) -* remove unused import ([2f8801c](https://github.com/casbin/casbin.js/commit/2f8801c47e716f69c36b49a73a45c67d9c751b92)) -* remove use spread operator with await in array ([6e4f876](https://github.com/casbin/casbin.js/commit/6e4f87676301470a178ccd10efd28f6758cc738e)) -* rename StringAdapter to MemoryAdapter ([aa92d40](https://github.com/casbin/casbin.js/commit/aa92d40851d605d482b2a32841120bd30baff9eb)) -* stackoverflow in getImplicitRolesForUser ([d0fc49f](https://github.com/casbin/casbin.js/commit/d0fc49fb12c7cbb9f985d444c1ed7613ded0121b)) -* support comments after expression ([c97cb26](https://github.com/casbin/casbin.js/commit/c97cb26441d79316960a0464e8d56918859d969c)) -* Support for loadIncrementalFilteredPolicy ([72c2001](https://github.com/casbin/casbin.js/commit/72c2001ab064d190bfa5bcd305829d083eca52f7)) -* support pattern function in 3rd args of g ([#199](https://github.com/casbin/casbin.js/issues/199)) ([27005f8](https://github.com/casbin/casbin.js/commit/27005f85829f11193cb4ecfd14be5ed6e64ad63c)) -* tests. ([4da5291](https://github.com/casbin/casbin.js/commit/4da52916d27f262a4813d2b4ff78461312b67c22)) -* transfer from micromatch to picomatch ([#264](https://github.com/casbin/casbin.js/issues/264)) ([6be1b06](https://github.com/casbin/casbin.js/commit/6be1b06f2225bc906b2a0e215ff8635c6dd3422f)) -* update expression-eval ([95de296](https://github.com/casbin/casbin.js/commit/95de29650251af781d8638011dcc5cabeef2784c)) -* use csv-like format ([32ec20d](https://github.com/casbin/casbin.js/commit/32ec20d07ff1c0f21c910a450398d7163ca1d1be)) -* **builtinoperators:** fix function keyMatch3 ([1245aa0](https://github.com/casbin/casbin.js/commit/1245aa072b47135b49cb70abeed0796908a8feb7)), closes [#214](https://github.com/casbin/casbin.js/issues/214) -* **enforcer.ts:** fix deleteUser and improve deleteRole description ([1e6af16](https://github.com/casbin/casbin.js/commit/1e6af16e939543a56dbf9cb5d39924263186fc9a)), closes [#118](https://github.com/casbin/casbin.js/issues/118) -* **rbac:** fix defaultRoleManager hasRole method ([#211](https://github.com/casbin/casbin.js/issues/211)) ([4f3ba65](https://github.com/casbin/casbin.js/commit/4f3ba65429f91250485b8a0b070f16cb750955cd)) -* update casbinJsGetPermissionForUser for v0.1.0 Casbin.js ([#186](https://github.com/casbin/casbin.js/issues/186)) ([6c277e8](https://github.com/casbin/casbin.js/commit/6c277e8858cf07d9a098817b72710a30c4117fa9)) - - ### Features -* add addMatchingFunc to DefaultRoleManager ([cc04e65](https://github.com/casbin/casbin.js/commit/cc04e659a1c3b78bb12dcccbb2149bfd9d96c97c)) -* add BuildIncrementalRoleLinks ([b565005](https://github.com/casbin/casbin.js/commit/b5650055a6e8c47da49dc3b7eb8646bb5bda90d9)) -* add casbinJsGetPermissionForUser ([30ae126](https://github.com/casbin/casbin.js/commit/30ae126b962df6fc580ce943f20e8bf0ce5349c3)) -* add enforceEx() ([#271](https://github.com/casbin/casbin.js/issues/271)) ([762efd9](https://github.com/casbin/casbin.js/commit/762efd9d9766fbc8e95f9d5160413ed2a8c6ce88)) -* add getImplicitUsersForPermission ([ad9df14](https://github.com/casbin/casbin.js/commit/ad9df1417cbdb7e0d9065c78e86181d193778adf)) -* add glob pattern to built-in function ([8415fc2](https://github.com/casbin/casbin.js/commit/8415fc2648796d033c85771e27219bd32541982e)) -* add initRmMap ([87f8011](https://github.com/casbin/casbin.js/commit/87f801109e9cf4b0b423e3b76e1a8b9987b1b600)) -* Add lazyload option at enforcer init method ([#289](https://github.com/casbin/casbin.js/issues/289)) ([e858dcb](https://github.com/casbin/casbin.js/commit/e858dcbab2351de038e2c5385bbfd20b7aa255ad)) -* add named addMatchingFunc ([65d3a26](https://github.com/casbin/casbin.js/commit/65d3a2655c638085938de9df4efa5a7d16bfa788)) -* add policyArrayToString and policyStringToArray to util ([e71b40f](https://github.com/casbin/casbin.js/commit/e71b40fc1917f1f8bd4f64d24372f6044c052102)) -* add priority_policy_explicit support ([#250](https://github.com/casbin/casbin.js/issues/250)) ([763c18e](https://github.com/casbin/casbin.js/commit/763c18e7f3cfa068e7b61fdd7491dd0365b86dca)) -* add support for `in` operator ([a44c6a9](https://github.com/casbin/casbin.js/commit/a44c6a99ed36634a67e7888472e8f6d324b257f4)) -* add sync mode ([70e4e12](https://github.com/casbin/casbin.js/commit/70e4e12610dc42b6f25f8df268611ee1a0cbc7bd)) -* add unittest ([3cd5b73](https://github.com/casbin/casbin.js/commit/3cd5b7307b54342849029c957ceec81fc84f0fdd)) -* add updatePolicy() ([#234](https://github.com/casbin/casbin.js/issues/234)) ([a3218f1](https://github.com/casbin/casbin.js/commit/a3218f1a5d134838c0fb90c8ad1c8751e26c6332)), closes [#235](https://github.com/casbin/casbin.js/issues/235) -* avoid miss initialize() ([1394e8d](https://github.com/casbin/casbin.js/commit/1394e8ddfdc4cc9d8859ae034a8f36fb9e3b54e7)) -* changing TypeScript target from ES6 to ES2017 ([6f4f50f](https://github.com/casbin/casbin.js/commit/6f4f50f205dfb7187e34a0439f2b4f0bf6ed5a47)) -* controls whether to automatically notify Watcher ([2ce07c2](https://github.com/casbin/casbin.js/commit/2ce07c29cd49c6da304063e8075923b739fc5145)) -* enforceSync ([ff41f0a](https://github.com/casbin/casbin.js/commit/ff41f0a7c6eebbfafe985a929eba9e70f2c4b162)) -* Extend multiple sections type of escapeAssertion ([#180](https://github.com/casbin/casbin.js/issues/180)) ([4a8cc10](https://github.com/casbin/casbin.js/commit/4a8cc106862bee79fb1533338bde16669d40f5f5)) -* implement csv parser ([f2ddaab](https://github.com/casbin/casbin.js/commit/f2ddaab9223cd83d21978c473525b469cd419a4b)) -* implement string adapater ([fabd784](https://github.com/casbin/casbin.js/commit/fabd784ff5f2c2dbb0e1ddc3867b18adeb423da8)) -* implementation cachedEnforcer ([0ace1a6](https://github.com/casbin/casbin.js/commit/0ace1a66a36d5fe3ada37bfaaa938b84fc001c58)) -* improve effector for improve performance ([57de7b2](https://github.com/casbin/casbin.js/commit/57de7b2f1d21ceebb7097552c86721d94cac2275)) -* Multiple sections type ([2635601](https://github.com/casbin/casbin.js/commit/2635601ab1b1dd8d613bbb6b62d52f1cb86400f6)) -* RBAC with Domains API ([5e49b41](https://github.com/casbin/casbin.js/commit/5e49b41a2988a20e324715377e0c8302c9e9c3aa)) -* support RBAC for syncedEnforcer ([#150](https://github.com/casbin/casbin.js/issues/150)) ([2bf4299](https://github.com/casbin/casbin.js/commit/2bf42996d035eaa4dd659d781f2ce6b89fc396df)) -* sync with upstream ([ca4b572](https://github.com/casbin/casbin.js/commit/ca4b57268f0cfe362a46237d583fd907578423d0)) -* synchronized enforcer ([ecec514](https://github.com/casbin/casbin.js/commit/ecec514a582f1bfad94214b61ee06fc1cab3fc36)) -* use new license format ([284d2a4](https://github.com/casbin/casbin.js/commit/284d2a48cd67db8c197de24a99029858dbbe2da8)) - - -### improvement - -* convert all management_api to async function ([e9f4d38](https://github.com/casbin/casbin.js/commit/e9f4d38e153b10ffbd4fa09355ec72eb3dae47cd)) - - -### BREAKING CHANGES - -* **model** addPolicies, removePolicies and removeFilteredPolicy returns [boolean, string[][]] -* - provides a new interface for Effector -* see # +* convert node-casbin to pure javascript project as casbin.js v1 # [1.0.0-beta.5](https://github.com/casbin/casbin.js/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2021-09-29) diff --git a/README.md b/README.md index 8f468165..379c2213 100644 --- a/README.md +++ b/README.md @@ -40,10 +40,10 @@ https://casbin.org/docs/en/overview ```shell script # NPM -npm install casbin.js@next --save +npm install casbin.js --save # Yarn -yarn add casbin.js@next +yarn add casbin.js ``` ## Get started diff --git a/package.json b/package.json index 71562dba..cb53ffa6 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ }, "publishConfig": { "registry": "https://registry.npmjs.org/", - "tag": "next" + "tag": "latest" }, "browser": { "path": "path-browserify" From 60d77581670d58fc2f7ef3a7c6c0e9f5c69dcd75 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 30 Oct 2021 10:48:25 +0000 Subject: [PATCH 493/497] chore(release): 1.0.1 [skip ci] ## [1.0.1](https://github.com/casbin/casbin.js/compare/v1.0.0...v1.0.1) (2021-10-30) ### Bug Fixes * update doc and release channel ([da52e9b](https://github.com/casbin/casbin.js/commit/da52e9b59543076fa29d52328f3a938d2be7e07c)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eda4b0d2..2b939405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.0.1](https://github.com/casbin/casbin.js/compare/v1.0.0...v1.0.1) (2021-10-30) + + +### Bug Fixes + +* update doc and release channel ([da52e9b](https://github.com/casbin/casbin.js/commit/da52e9b59543076fa29d52328f3a938d2be7e07c)) + # 1.0.0 (2021-10-30) diff --git a/package.json b/package.json index cb53ffa6..fdfa73f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "casbin.js", - "version": "1.0.0", + "version": "1.0.1", "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in Typescript", "main": "lib/index.js", "typings": "lib/index.d.ts", From 07523e1a8be1031a74e11e649d3d37da13977271 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 21:18:54 +0800 Subject: [PATCH 494/497] chore(deps): bump semver-regex from 3.1.2 to 3.1.3 (#247) Bumps [semver-regex](https://github.com/sindresorhus/semver-regex) from 3.1.2 to 3.1.3. - [Release notes](https://github.com/sindresorhus/semver-regex/releases) - [Commits](https://github.com/sindresorhus/semver-regex/commits) --- updated-dependencies: - dependency-name: semver-regex dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7199201c..568b818f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6873,9 +6873,9 @@ semver-diff@^3.1.1: semver "^6.3.0" semver-regex@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" - integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.3.tgz#b2bcc6f97f63269f286994e297e229b6245d0dc3" + integrity sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ== "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: version "5.7.1" From e42a23d1f4793f312ac8a1d1d1824cd63c092fca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 21:19:02 +0800 Subject: [PATCH 495/497] chore(deps): bump tar from 6.1.0 to 6.1.11 (#246) Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.11. - [Release notes](https://github.com/npm/node-tar/releases) - [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.11) --- updated-dependencies: - dependency-name: tar dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 568b818f..372bcd39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1903,7 +1903,7 @@ chardet@^0.7.0: chownr@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^2.0.0: @@ -3210,7 +3210,7 @@ fs-extra@^9.0.0: fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" @@ -5382,9 +5382,9 @@ minipass-sized@^1.0.3: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + version "3.1.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" + integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== dependencies: yallist "^4.0.0" @@ -7444,9 +7444,9 @@ table@^6.0.4: strip-ansi "^6.0.0" tar@^6.0.2, tar@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -8095,7 +8095,7 @@ y18n@^5.0.5: yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: From 43849d2e3d13837a46642fd56d96527786b190c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 21:19:08 +0800 Subject: [PATCH 496/497] chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#245) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 372bcd39..b74ce053 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6140,9 +6140,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^3.0.0: version "3.0.0" From d22cfc673ae38894ede976c76aeb62fe0231ca05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 21:19:15 +0800 Subject: [PATCH 497/497] chore(deps): bump tmpl from 1.0.4 to 1.0.5 (#244) Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5. - [Release notes](https://github.com/daaku/nodejs-tmpl/releases) - [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5) --- updated-dependencies: - dependency-name: tmpl dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b74ce053..488c3f1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7545,9 +7545,9 @@ tmp@^0.0.33: os-tmpdir "~1.0.2" tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0"